Postgresql recibió soporte de enumeración hace algún tiempo.
CREATE TYPE myenum AS ENUM (
'value1',
'value2',
);
¿Cómo obtengo todos los valores especificados en la enumeración con una consulta?
Postgresql recibió soporte de enumeración hace algún tiempo.
CREATE TYPE myenum AS ENUM (
'value1',
'value2',
);
¿Cómo obtengo todos los valores especificados en la enumeración con una consulta?
Respuestas:
Si quieres una matriz:
SELECT enum_range(NULL::myenum)
Si desea un registro separado para cada elemento de la enumeración:
SELECT unnest(enum_range(NULL::myenum))
Esta solución funciona como se esperaba, incluso si su enumeración no está en el esquema predeterminado. Por ejemplo, reemplace myenum
con myschema.myenum
.
El tipo de datos de los registros devueltos en la consulta anterior será myenum
. Dependiendo de lo que esté haciendo, es posible que deba enviarlo al texto. p.ej
SELECT unnest(enum_range(NULL::myenum))::text
Si desea especificar el nombre de la columna, puede agregarlo AS my_col_name
.
Gracias a Justin Ohms por señalar algunos consejos adicionales, que incorporé a mi respuesta.
NULL::
?
SELECT enum_range(myenum)
? ¿Cuál es el significado de fundición null
?
Tratar:
SELECT e.enumlabel
FROM pg_enum e
JOIN pg_type t ON e.enumtypid = t.oid
WHERE t.typname = 'myenum'
ORDER BY e.enumsortorder
a la consulta. Los valores enumerados probablemente estarán fuera de orden si se insertaron nuevos valores en el tipo de enumeración usando BEFORE
o AFTER
.
SELECT unnest(enum_range(NULL::your_enum))::text AS your_column
Esto devolverá un conjunto de resultados de una sola columna del contenido de la enumeración "your_enum" con una columna llamada "your_column" de tipo texto.
Puede obtener todos los valores de enumeración para una enumeración utilizando la siguiente consulta. La consulta también le permite elegir en qué espacio de nombres vive la enumeración (lo cual es necesario si la enumeración se define en múltiples espacios de nombres; de lo contrario, puede omitir esa parte de la 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'))