Saya rasa Anda perlu memeriksa versi PostgreSQL dan mengubah perilaku dengan tepat, atau menggunakan SQL yang tidak menyentuh katalog untuk menentukan urutannya.
Ide untuk yang terakhir, diberikan dummy enum:
CREATE TYPE test_enum AS ENUM ('z','x','y');
ALTER TYPE test_enum ADD VALUE 'a' BEFORE 'x';
adalah ORDER BY
pemeran label enum ke nilai tipe enum menggunakan row_number
fungsi jendela tersedia di 8.4 dan yang lebih baru:
SELECT enumlabel, row_number() OVER (ORDER BY enumlabel::test_enum) AS sort_key
FROM pg_catalog.pg_enum
WHERE enumtypid = 'test_enum'::regtype;
Ini memberi Anda label yang dipesan dengan kunci pengurutan. Dalam versi Pg yang lebih lama, Pg hanya akan mengurutkan berdasarkan oid
dari nilai enum, dalam versi yang lebih baru itu akan menggunakan enumsortorder, tetapi Anda tidak perlu peduli, Anda baru saja memberi tahu PostgreSQL "urutkan ini ke dalam urutan yang benar".
Atau jika Anda hanya membutuhkannya sesuai urutan yang diharapkan server, tulis:
SELECT enumlabel
FROM pg_catalog.pg_enum
WHERE enumtypid = 'test_enum'::regtype
ORDER BY enumlabel::test_enum