Postgresql mendapat dukungan enum beberapa waktu lalu.
CREATE TYPE myenum AS ENUM (
'value1',
'value2',
);
Bagaimana cara mendapatkan semua nilai yang ditentukan dalam enum dengan kueri?
Postgresql mendapat dukungan enum beberapa waktu lalu.
CREATE TYPE myenum AS ENUM (
'value1',
'value2',
);
Bagaimana cara mendapatkan semua nilai yang ditentukan dalam enum dengan kueri?
Jawaban:
Jika Anda menginginkan sebuah array:
SELECT enum_range(NULL::myenum)
Jika Anda ingin catatan terpisah untuk setiap item dalam enum:
SELECT unnest(enum_range(NULL::myenum))
Solusi ini berfungsi seperti yang diharapkan bahkan jika enum Anda tidak ada dalam skema default. Misalnya, ganti myenumdengan myschema.myenum.
Tipe data catatan yang dikembalikan dalam kueri di atas adalah myenum. Tergantung pada apa yang Anda lakukan, Anda mungkin perlu membaca. misalnya
SELECT unnest(enum_range(NULL::myenum))::text
Jika Anda ingin menentukan nama kolom, Anda dapat menambahkan AS my_col_name.
Penghargaan untuk Justin Ohms karena menunjukkan beberapa tips tambahan, yang saya masukkan ke dalam jawaban saya.
NULL::?
SELECT enum_range(myenum)? Apa arti casting null?
Mencoba:
SELECT e.enumlabel
FROM pg_enum e
JOIN pg_type t ON e.enumtypid = t.oid
WHERE t.typname = 'myenum'
ORDER BY e.enumsortorderkueri. Nilai enumerasi kemungkinan besar akan rusak jika nilai baru dimasukkan ke dalam jenis enumerasi menggunakan BEFOREatau AFTER.
SELECT unnest(enum_range(NULL::your_enum))::text AS your_column
Ini akan mengembalikan satu set hasil kolom tunggal dari isi enum "your_enum" dengan kolom bernama "your_column" dari jenis teks.
Anda bisa mendapatkan semua nilai enum untuk enum menggunakan kueri berikut. Kueri memungkinkan Anda memilih namespace tempat enum hidup juga (yang diperlukan jika enum didefinisikan dalam beberapa ruang nama; jika tidak, Anda dapat menghilangkan bagian dari kueri itu).
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'))