Postgresql już jakiś czas temu otrzymał wsparcie dla enum.
CREATE TYPE myenum AS ENUM (
'value1',
'value2',
);
Jak uzyskać wszystkie wartości określone w wyliczeniu za pomocą zapytania?
Postgresql już jakiś czas temu otrzymał wsparcie dla enum.
CREATE TYPE myenum AS ENUM (
'value1',
'value2',
);
Jak uzyskać wszystkie wartości określone w wyliczeniu za pomocą zapytania?
Odpowiedzi:
Jeśli chcesz mieć tablicę:
SELECT enum_range(NULL::myenum)
Jeśli chcesz mieć osobny rekord dla każdego elementu w wyliczeniu:
SELECT unnest(enum_range(NULL::myenum))
To rozwiązanie działa zgodnie z oczekiwaniami, nawet jeśli wyliczenie nie znajduje się w schemacie domyślnym. Na przykład, należy wymienić myenum
zmyschema.myenum
.
Typ danych zwracanych rekordów w powyższym zapytaniu będzie myenum
. W zależności od tego, co robisz, może być konieczne przesłanie do tekstu. na przykład
SELECT unnest(enum_range(NULL::myenum))::text
Jeśli chcesz określić nazwę kolumny, możesz dołączyć AS my_col_name
.
Podziękowania dla Justina Ohmsa za wskazanie kilku dodatkowych wskazówek, które włączyłem do mojej odpowiedzi.
NULL::
?
SELECT enum_range(myenum)
? Jakie jest znaczenie castingu null
?
Próbować:
SELECT e.enumlabel
FROM pg_enum e
JOIN pg_type t ON e.enumtypid = t.oid
WHERE t.typname = 'myenum'
ORDER BY e.enumsortorder
do zapytania. Wyliczone wartości będą najprawdopodobniej nie w kolejności, jeśli nowe wartości zostały wstawione do typu wyliczenia przy użyciu BEFORE
lub AFTER
.
SELECT unnest(enum_range(NULL::your_enum))::text AS your_column
To zwróci pojedynczy zestaw wyników kolumny zawierający zawartość wyliczenia „twoje_enum” z kolumną o nazwie „twoja_kolumna” typu tekst.
Możesz pobrać wszystkie wartości wyliczenia dla wyliczenia przy użyciu następującego zapytania. Zapytanie umożliwia wybranie przestrzeni nazw, w której znajduje się wyliczenie (co jest wymagane, jeśli wyliczenie jest zdefiniowane w wielu przestrzeniach nazw; w przeciwnym razie można pominąć tę część zapytania).
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'))