Postgresql a obtenu le support enum il y a quelque temps.
CREATE TYPE myenum AS ENUM (
'value1',
'value2',
);
Comment obtenir toutes les valeurs spécifiées dans l'énumération avec une requête?
Postgresql a obtenu le support enum il y a quelque temps.
CREATE TYPE myenum AS ENUM (
'value1',
'value2',
);
Comment obtenir toutes les valeurs spécifiées dans l'énumération avec une requête?
Réponses:
Si vous voulez un tableau:
SELECT enum_range(NULL::myenum)
Si vous voulez un enregistrement séparé 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 n'est 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
.
Merci à Justin Ohms pour avoir signalé quelques conseils supplémentaires, que j'ai incorporés dans ma réponse.
NULL::
?
SELECT enum_range(myenum)
? Quelle est la signification du casting null
?
Essayer:
SELECT e.enumlabel
FROM pg_enum e
JOIN pg_type t ON e.enumtypid = t.oid
WHERE t.typname = 'myenum'
ORDER BY e.enumsortorder
à la requête. Les valeurs énumérées seront probablement dans le désordre si de nouvelles valeurs ont été insérées dans le type d'énumération à l'aide de BEFORE
ou AFTER
.
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 texte.
Vous pouvez obtenir toutes les valeurs d'énumération pour une énumération à l'aide de la requête suivante. La requête vous permet de choisir dans quel espace de noms l'énumération réside également (ce qui est obligatoire si l'énumération est définie dans plusieurs espaces de noms; 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'))