Ik denk dat je de PostgreSQL-versie moet controleren en het gedrag op de juiste manier moet veranderen, of SQL moet gebruiken die de catalogus niet raakt om de volgorde te bepalen.
Een idee voor de laatste, gegeven dummy enum:
CREATE TYPE test_enum AS ENUM ('z','x','y');
ALTER TYPE test_enum ADD VALUE 'a' BEFORE 'x';
is om ORDER BY
de cast van het enum-label naar waarden van het enum-type met behulp van het row_number
vensterfunctie beschikbaar in 8.4 en nieuwer:
SELECT enumlabel, row_number() OVER (ORDER BY enumlabel::test_enum) AS sort_key
FROM pg_catalog.pg_enum
WHERE enumtypid = 'test_enum'::regtype;
Hiermee krijgt u de labels geordend op een sorteersleutel. In oudere Pg-versies sorteert Pg gewoon op de oid
van de enum-waarden, in nieuwere versies zal het de enumsortvolgorde gebruiken, maar u hoeft zich geen zorgen te maken, u heeft zojuist tegen PostgreSQL gezegd "sorteer deze in de juiste volgorde alstublieft".
Of als je ze gewoon nodig hebt in de volgorde die de server verwacht, schrijf dan:
SELECT enumlabel
FROM pg_catalog.pg_enum
WHERE enumtypid = 'test_enum'::regtype
ORDER BY enumlabel::test_enum