2011-06-19 61 views
35

我的代碼是:商店選擇查詢的一個陣列輸出的Postgres

SELECT column_name 
FROM information.SCHEMA.columns 
WHERE table_name = 'aean' 

它返回表aean的列名。
現在我宣佈一個數組:

DECLARE colnames text[] 

我怎麼能存儲選擇在colnames陣列輸出。
是否有任何需要初始化的colnames?

+0

+1,我有完全相同的錯誤MESSAGE-ERROR達到這裏:無法找到數據類型information_schema.sql_identifier數組類型。正在嘗試'array_agg(column_name,',')' – jerrymouse

回答

71

有兩種方法。一個是聚集:

SELECT array_agg(column_name::TEXT) 
FROM information.schema.columns 
WHERE table_name = 'aean' 

另一種是使用數組構造函數:

SELECT ARRAY(
SELECT column_name 
FROM information.schema.columns 
WHERE table_name = 'aean') 

我假定這是PLPGSQL。在這種情況下,你可以像這樣分配它:

colnames := ARRAY(
SELECT column_name 
FROM information.schema.columns 
WHERE table_name='aean' 
); 
+0

你可以給我的代碼工作在Postgres上,因爲這不工作在Postgres上錯誤:無法找到數據類型的數組類型information_schema.sql_identifier – mitesh

+0

對不起。無意義的複製和粘貼獲得了包含在所有三個調用中的array_agg()。我還爲了讓你的PG版本感到開心而打出了最初的版本。 –

+1

+1謝謝,正在尋找完全相同的東西。 – jerrymouse

0

我有完全相同的問題。由丹尼斯給出的解決方案只是多一個工作改進(類型必須指定):

SELECT ARRAY(
SELECT column_name::text 
FROM information_schema.columns 
WHERE table_name='aean' 
)