Jeg tror, du bliver nødt til at tjekke PostgreSQL-versionen og ændre adfærd på passende vis, eller bruge SQL, der ikke rører kataloget, for at bestemme rækkefølgen.
En idé til sidstnævnte, givet dummy enum:
CREATE TYPE test_enum AS ENUM ('z','x','y');
ALTER TYPE test_enum ADD VALUE 'a' BEFORE 'x';
er at ORDER BY
støbningen af enum-etiketten til værdier af enum-typen ved hjælp af row_number
vinduesfunktion tilgængelig i 8.4 og nyere:
SELECT enumlabel, row_number() OVER (ORDER BY enumlabel::test_enum) AS sort_key
FROM pg_catalog.pg_enum
WHERE enumtypid = 'test_enum'::regtype;
Dette giver dig etiketterne sorteret efter en sorteringsnøgle. I ældre Pg-versioner vil Pg bare sortere efter oid
af enum-værdierne, vil den i nyere versioner bruge enumsortorder, men du behøver ikke at være ligeglad på nogen måde, du har lige fortalt PostgreSQL "sortér disse i den rigtige rækkefølge, tak".
Eller hvis du bare skal bruge dem i den rækkefølge, serveren forventer, så skriv:
SELECT enumlabel
FROM pg_catalog.pg_enum
WHERE enumtypid = 'test_enum'::regtype
ORDER BY enumlabel::test_enum