2016-04-22 13 views
7

私はredshiftを使用しており、カンマ区切りの列リストを作成したいと考えています。私はlistaggを使用して情報スキーマの列名をつかむしようとしている:redshift - information_schema.columnsテーブルでlistaggを使用する方法

SELECT 
listagg(column_name,',') within group (order by ordinal_position) 
FROM information_schema.columns 
WHERE table_schema = 'my_schema' 
AND  table_name = 'my table'; 

私は次のエラー取得しています:これはINFORMATION_SCHEMAでLISTAGGを適用する方法を答えていませんが

[Amazon](500310) Invalid operation: Function (listagg(text,text)) must be applied on at least one user created tables; 

答えて

1

を、私は代わりにpgカタログ表でlistaggを使用する別の方法を推奨できます。

これを試してみてください:

SELECT DISTINCT listagg(attname, ',') WITHIN GROUP (ORDER BY a.attsortkeyord) AS "columns" 
FROM pg_attribute a, pg_namespace ns, pg_class c, pg_type t, stv_tbl_perm p, pg_database db 
WHERE t.oid=a.atttypid AND a.attrelid=p.id AND ns.oid = c.relnamespace AND db.oid = p.db_id AND c.oid = a.attrelid 
AND typname NOT IN ('oid','xid','tid','cid') 
AND ns.nspname = 'my_schema' 
AND RTRIM(name) = 'my table' 
関連する問題