選択クエリの出力をpostgresの1つの配列に格納します


88

私のコードは:

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

テーブルの列名を返しますaean
今、私は配列を宣言しました:

DECLARE colnames text[]

selectの出力をcolnames配列に格納するにはどうすればよいですか。
colnamesを初期化する必要はありますか?


+1、まったく同じエラーメッセージでここに到達しました-エラー:データ型information_schema.sql_identifierの配列タイプが見つかりませんでした。試してみましたarray_agg(column_name, ',')
jerrymouse 2012

回答:


151

2つの方法があります。1つは集約することです:

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

もう1つは、配列コンストラクターを使用することです。

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'
);

postgresでは機能しないためpostgresで機能するコードを教えてくださいエラー:データ型information_schema.sql_identifierの配列型が見つかりませんでした
mitesh 2011年

申し訳ありませんが、それについて。不注意なコピーと貼り付けにより、3つの呼び出しすべてにarray_agg()が含まれるようになりました。また、PGバージョンを満足させるために、最初のものをタイプキャストしました。
Denis de Bernardy 2011年

9
plpgsqlの部分をさらに調べている人はDECLARE、配列をmy_array INTEGER[];(または関連するタイプが何であれ)として使用できます。のWHEREようなクエリの句で配列を使用することもできますWHERE values = ANY(my_array)ANYそれに等価機能ので、アレイ又はセットを受け取り、その配列/セットに存在するかチェックするIN ()意味で、
user2490003

11

私はまったく同じ問題を抱えていました。Denisによって提供されたソリューションのもう1つの実用的な変更(タイプを指定する必要があります):

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

1
これはもはや当てはまらないようです。
ソビウト
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.