Postgresqlは少し前にenumサポートを取得しました。
CREATE TYPE myenum AS ENUM (
'value1',
'value2',
);
クエリで列挙型で指定されたすべての値を取得するにはどうすればよいですか?
配列が必要な場合:
SELECT enum_range(NULL::myenum)
列挙型の各アイテムに個別のレコードが必要な場合:
SELECT unnest(enum_range(NULL::myenum))
このソリューションは、enumがデフォルトのスキーマにない場合でも期待どおりに機能します。たとえば、myenum
をmyschema.myenum
に置き換えます。
上記のクエリで返されるレコードのデータ型はmyenum
になります。実行内容によっては、テキストにキャストする必要がある場合があります。例えば.
SELECT unnest(enum_range(NULL::myenum))::text
列名を指定する場合は、AS my_col_name
を追加できます。
追加のヒントを指摘してくれたJustin Ohmsに感謝します。
試してください:
SELECT e.enumlabel
FROM pg_enum e
JOIN pg_type t ON e.enumtypid = t.oid
WHERE t.typname = 'myenum'
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'))