1

スキーマ内のすべての列挙型とその値を取得する SQL SELECT を作成しました。

SELECT 
    t.typname, array_agg(e.enumlabel) 
FROM pg_type t
JOIN pg_enum e ON t.oid = e.enumtypid
JOIN pg_namespace n ON t.typnamespace = n.oid
WHERE t.typtype = 'e' AND n.nspname = 'public'
GROUP BY typname

選択をビューに入れたので、呼び出すたびに書き込む必要はありません。私が気になる唯一のことは、スキーマの名前を変更するか、別のスキーマで使用する場合、スキーマの名前を手動で書き直す必要があることです。コードの 6 行目を確認してください。

    WHERE t.typtype = 'e' AND n.nspname = 'public'

public はハードタイプされています。postgres で選択するとき、どのスキーマから選択したかを示す「グローバル」変数はありますか? 私は何も見つけることができませんでした。

ありがとう

PS: postgres 8.4 を使用しています

4

2 に答える 2

4

現在のスキーマは、関数を使用して取得できますcurrent_schema()

http://www.postgresql.org/docs/current/static/functions-info.html

于 2012-04-10T14:57:20.277 に答える
0

スキーマを配線したり、current_schema()で検索したりする代わりに、スキーマごとにビューをグループ化してから、ビューを選択することもできます。

create or replace view enum_vw as
SELECT 
    n.nspname, t.typname, array_agg(e.enumlabel) 
FROM pg_type t
JOIN pg_enum e ON t.oid = e.enumtypid
JOIN pg_namespace n ON t.typnamespace = n.oid
WHERE t.typtype = 'e'
GROUP BY n.nspname, t.typname;

select * from enum_vw where nspname = 'public';
于 2012-04-10T22:13:10.440 に答える