Existe uma maneira de determinar se um tipo definido pelo usuário no PostgreSQL é um ENUM?
Essencialmente temos o seguinte:
CREATE TYPE foo AS ENUM (
'Sometimes',
'You',
'Wanna',
'Go',
'Where Everybody Knows Your Name'
);
Com uma tabela instanciada por:
CREATE TABLE bar (
lyrics foo DEFAULT 'Wanna'::foo
);
Eu sou capaz de determinar o tipo da foo
coluna lyrics
, no entanto, estou tendo problemas para encontrar uma maneira de determinar se foo
é ou não um ENUM.
Por contexto, preciso dessas informações para obter programaticamente uma lista de todos os valores possíveis de foo
quando for fornecida uma coluna de lyrics
.
Como muitas vezes com essas perguntas, o
\set ECHO_HIDDEN on
comando depsql
ajuda.\dT+
mostrará os valores possíveis do enum, se o tipo em questão for um enum. A consulta por trás da saída é bastante complexa, mas pode-se simplificá-la para atender às suas necessidades, comoIsso retornará
{NULL}
(uma matriz com um NULL) se o tipo não for uma enumeração e os elementos reais como uma matriz, caso contrário. Você pode ajustá-lo ainda mais, se necessário.Você pode fazer algo assim,
Você pode criar uma função simples que faça isso também,