Myślę, że będziesz musiał sprawdzić wersję PostgreSQL i odpowiednio zmienić zachowanie lub użyć SQL, który nie dotyka katalogu, aby określić kolejność.
Pomysł na to drugie, biorąc pod uwagę fikcyjną enum:
CREATE TYPE test_enum AS ENUM ('z','x','y');
ALTER TYPE test_enum ADD VALUE 'a' BEFORE 'x';
jest ORDER BY
rzutowanie etykiety enum na wartości typu enum przy użyciu row_number
funkcja okna dostępna w wersji 8.4 i nowszych:
SELECT enumlabel, row_number() OVER (ORDER BY enumlabel::test_enum) AS sort_key
FROM pg_catalog.pg_enum
WHERE enumtypid = 'test_enum'::regtype;
Dzięki temu otrzymasz etykiety uporządkowane według klucza sortowania. W starszych wersjach Pg Pg będzie po prostu sortowany według oid
wartości enum, w nowszych wersjach użyje enumsortorder, ale i tak nie musisz się tym przejmować, właśnie powiedziałeś PostgreSQL "uporządkuj je we właściwej kolejności".
Lub jeśli potrzebujesz ich tylko w kolejności oczekiwanej przez serwer, napisz:
SELECT enumlabel
FROM pg_catalog.pg_enum
WHERE enumtypid = 'test_enum'::regtype
ORDER BY enumlabel::test_enum