Postgresql ha ottenuto supporto enum qualche tempo fa.
CREATE TYPE myenum AS ENUM (
'value1',
'value2',
);
Come ottengo tutti i valori specificati nell'enum con una query?
Postgresql ha ottenuto supporto enum qualche tempo fa.
CREATE TYPE myenum AS ENUM (
'value1',
'value2',
);
Come ottengo tutti i valori specificati nell'enum con una query?
Risposte:
Se vuoi un array:
SELECT enum_range(NULL::myenum)
Se si desidera un record separato per ciascun elemento nell'enum:
SELECT unnest(enum_range(NULL::myenum))
Questa soluzione funziona come previsto anche se il tuo enum non è nello schema predefinito. Ad esempio, sostituire myenum
con myschema.myenum
.
Sarà il tipo di dati dei record restituiti nella query precedente myenum
. A seconda di ciò che stai facendo, potrebbe essere necessario eseguire il cast al testo. per esempio
SELECT unnest(enum_range(NULL::myenum))::text
Se si desidera specificare il nome della colonna, è possibile aggiungere AS my_col_name
.
Ringraziamo Justin Ohms per aver sottolineato alcuni suggerimenti aggiuntivi, che ho inserito nella mia risposta.
NULL::
?
SELECT enum_range(myenum)
? Qual è il significato del casting null
?
Provare:
SELECT e.enumlabel
FROM pg_enum e
JOIN pg_type t ON e.enumtypid = t.oid
WHERE t.typname = 'myenum'
ORDER BY e.enumsortorder
alla query. I valori enumerati saranno probabilmente fuori servizio se nuovi valori sono stati inseriti nel tipo di enumerazione usando BEFORE
o AFTER
.
SELECT unnest(enum_range(NULL::your_enum))::text AS your_column
Ciò restituirà un set di risultati a colonna singola del contenuto dell'enum "your_enum" con una colonna denominata "your_column" di tipo testo.
È possibile ottenere tutti i valori di enum per un enum usando la seguente query. La query ti consente di scegliere in quale spazio dei nomi risiede anche l'enum (che è necessario se l'enum è definito in più spazi dei nomi, altrimenti puoi omettere quella parte della query).
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'))