O Postgresql recebeu suporte enum há algum tempo.
CREATE TYPE myenum AS ENUM (
'value1',
'value2',
);
Como obtenho todos os valores especificados na enumeração com uma consulta?
O Postgresql recebeu suporte enum há algum tempo.
CREATE TYPE myenum AS ENUM (
'value1',
'value2',
);
Como obtenho todos os valores especificados na enumeração com uma consulta?
Respostas:
Se você deseja uma matriz:
SELECT enum_range(NULL::myenum)
Se você deseja um registro separado para cada item da enumeração:
SELECT unnest(enum_range(NULL::myenum))
Essa solução funciona conforme o esperado, mesmo que sua enumeração não esteja no esquema padrão. Por exemplo, substitua myenum
por myschema.myenum
.
O tipo de dados dos registros retornados na consulta acima será myenum
. Dependendo do que você está fazendo, pode ser necessário converter em texto. por exemplo
SELECT unnest(enum_range(NULL::myenum))::text
Se você deseja especificar o nome da coluna, você pode anexar AS my_col_name
.
Os meus agradecimentos a Justin Ohms por apontar algumas dicas adicionais, que incorporei à minha resposta.
NULL::
?
SELECT enum_range(myenum)
? Qual é o significado do casting null
?
Experimentar:
SELECT e.enumlabel
FROM pg_enum e
JOIN pg_type t ON e.enumtypid = t.oid
WHERE t.typname = 'myenum'
ORDER BY e.enumsortorder
à consulta. Os valores enumerados provavelmente ficarão fora de ordem se novos valores forem inseridos no tipo de enumeração usando BEFORE
or AFTER
.
SELECT unnest(enum_range(NULL::your_enum))::text AS your_column
Isso retornará um conjunto de resultados de coluna única do conteúdo da enumeração "your_enum" com uma coluna denominada "your_column" do tipo text.
Você pode obter todos os valores de enum usando uma consulta a seguir. A consulta permite escolher em qual namespace o enum também está (o que é necessário se o enum estiver definido em vários namespaces; caso contrário, você poderá omitir essa parte da consulta).
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'))