SQL-запрос для получения всех значений, которые может иметь перечисление - PullRequest
119 голосов
/ 24 октября 2009

Postgresql получил поддержку enum некоторое время назад.

CREATE TYPE myenum AS ENUM (
'value1',
'value2',
);

Как получить все значения, указанные в перечислении с помощью запроса?

Ответы [ 4 ]

216 голосов
/ 26 июля 2013

Если вы хотите массив:

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.


Благодарим Джастина Омса за то, что он указал на некоторые дополнительные советы, которые я включил в свой ответ.

28 голосов
/ 24 октября 2009

Попробуйте:

SELECT e.enumlabel
  FROM pg_enum e
  JOIN pg_type t ON e.enumtypid = t.oid
  WHERE t.typname = 'myenum'
5 голосов
/ 29 августа 2013
SELECT unnest(enum_range(NULL::your_enum))::text AS your_column

Это вернет результирующий набор из одного столбца содержимого перечисления your_enum со столбцом с именем your_column типа text.

4 голосов
/ 10 января 2011

Вы можете получить все значения перечисления для перечисления, используя следующий запрос. Запрос позволяет вам выбрать, в каком пространстве имен перечисление также находится (это необходимо, если перечисление определено в нескольких пространствах имен; в противном случае вы можете опустить эту часть запроса).

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'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...