回答:
配列が必要な場合:
SELECT enum_range(NULL::myenum)
列挙型の項目ごとに個別のレコードが必要な場合:
SELECT unnest(enum_range(NULL::myenum))
列挙型がデフォルトのスキーマにない場合でも、このソリューションは期待どおりに機能します。例えば、交換してくださいmyenum
とmyschema.myenum
。
上記のクエリで返されるレコードのデータ型はになりますmyenum
。実行している内容によっては、テキストにキャストする必要がある場合があります。例えば
SELECT unnest(enum_range(NULL::myenum))::text
列名を指定する場合は、を追加できますAS my_col_name
。
いくつかの追加のヒントを指摘してくれたJustin Ohmsに感謝します。
NULL::
何ですか?
SELECT enum_range(myenum)
?キャストの意味は何null
ですか?
試してください:
SELECT e.enumlabel
FROM pg_enum e
JOIN pg_type t ON e.enumtypid = t.oid
WHERE t.typname = 'myenum'
ORDER BY e.enumsortorder
、クエリに追加します。BEFORE
またはを使用して列挙型に新しい値が挿入された場合、列挙値はおそらく順序が乱れますAFTER
。
SELECT unnest(enum_range(NULL::your_enum))::text AS your_column
これにより、テキスト型の「your_column」という名前の列を持つ列挙型「your_enum」の内容の単一列の結果セットが返されます。
次のクエリを使用して、enumのすべてのenum値を取得できます。クエリでは、列挙型が存在する名前空間も選択できます(列挙型が複数の名前空間で定義されている場合は必須です。それ以外の場合は、クエリのその部分を省略できます)。
SELECT enumlabel
FROM pg_enum
WHERE enumtypid=(SELECT typelem
FROM pg_type
WHERE typname='_myenum' AND
typnamespace=(SELECT oid
FROM pg_namespace
WHERE nspname='myschema'))