Postgresql получил поддержку enum некоторое время назад.
CREATE TYPE myenum AS ENUM (
'value1',
'value2',
);
Как получить все значения, указанные в перечислении с запросом?
Postgresql получил поддержку enum некоторое время назад.
CREATE TYPE myenum AS ENUM (
'value1',
'value2',
);
Как получить все значения, указанные в перечислении с запросом?
Если вам нужен массив:
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
.
Благодарим Джастина Омаса за указание некоторых дополнительных советов, которые я включил в свой ответ.
Try:
SELECT e.enumlabel
FROM pg_enum e
JOIN pg_type t ON e.enumtypid = t.oid
WHERE t.typname = 'myenum'
Вы можете получить все значения перечисления для перечисления, используя следующий запрос. Запрос позволяет выбрать, в каком пространстве имен также находится 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'))
SELECT unnest(enum_range(NULL::your_enum))::text AS your_column
Это вернет единичный результирующий набор содержимого перечисления "your_enum" с столбцом с именем "your_column" текста типа.