2013-11-24 23 views
1

我有一個混合類型的數據表(真正的,integrer,字符...)但我只會恢復具有實際值的列。POSTGRESQL:創建表作爲選擇特定類型的列

我可以構建這樣的:

SELECT 'SELECT ' || array_to_string(ARRAY(
select 'o' || '.' || c.column_name 
from information_schema.columns as c 
where table_name = 'final_datas' 
and c.data_type = 'real'), ',') || ' FROM final_datas as o' As sqlstmt 

給出的是:

"SELECT o.random,o.struct2d_pred2_num,o.pfam_num,o.transmb_num [...] FROM final_datas as o" 

的我想創建一個表,這些列。當然,這樣做,不起作用:

create table table2 as (
SELECT 'SELECT ' || array_to_string(ARRAY(
select 'o' || '.' || c.column_name 
from information_schema.columns as c 
where table_name = 'final_datas' 
and c.data_type = 'real'), ',') || ' FROM final_datas as o' As sqlstmt 
) 

建議?

+0

查找到pg_catalog此運行。運行'psql -E',然後運行'\ d final_datas',你會看到需要運行的相關查詢。 –

回答

1

你需要生成整個CREATE TABLE語句動態SQL:

SELECT 'CREATE TABLE table2 AS SELECT ' || array_to_string(ARRAY(
select 'o' || '.' || c.column_name 
from information_schema.columns as c 
where table_name = 'final_datas' 
and c.data_type = 'real'), ',') || ' FROM final_datas as o' As sqlstmt 

結果可以EXECUTE sqlstmt;

+0

謝謝,它的作品! – Kaervas

相關問題