Postgresql a reçu un soutien considérable il y a quelque temps.
CREATE TYPE myenum AS ENUM (
'value1',
'value2',
);
Comment obtenir toutes les valeurs spécifiées dans l'énum avec une requête?
Si vous voulez un tableau:
SELECT enum_range(NULL::myenum)
Si vous souhaitez un enregistrement distinct pour chaque élément de l'énumération:
SELECT unnest(enum_range(NULL::myenum))
Cette solution fonctionne comme prévu même si votre énumération ne se trouve pas dans le schéma par défaut. Par exemple, remplacez myenum
par myschema.myenum
.
Le type de données des enregistrements renvoyés dans la requête ci-dessus sera myenum
. Selon ce que vous faites, vous devrez peut-être convertir en texte. par exemple.
SELECT unnest(enum_range(NULL::myenum))::text
Si vous souhaitez spécifier le nom de la colonne, vous pouvez ajouter AS my_col_name
.
Nous remercions Justin Ohms d'avoir signalé quelques astuces supplémentaires, que j'ai intégrées à ma réponse.
Essayer:
SELECT e.enumlabel
FROM pg_enum e
JOIN pg_type t ON e.enumtypid = t.oid
WHERE t.typname = 'myenum'
SELECT unnest(enum_range(NULL::your_enum))::text AS your_column
Cela renverra un ensemble de résultats de colonne unique du contenu de l'énumération "your_enum" avec une colonne nommée "your_column" de type text.
Vous pouvez obtenir toutes les valeurs enum pour une enum en utilisant la requête suivante. La requête vous permet également de choisir le nom de l'espace de nommage de l'énum (requis si l'enum est défini dans plusieurs espaces de nommage, sinon vous pouvez omettre cette partie de la requête).
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'))