Jag tror att du måste kontrollera PostgreSQL-versionen och ändra beteende på lämpligt sätt, eller använda SQL som inte rör katalogen för att avgöra beställningen.
En idé för det senare, givet dummy enum:
CREATE TYPE test_enum AS ENUM ('z','x','y');
ALTER TYPE test_enum ADD VALUE 'a' BEFORE 'x';
är att ORDER BY
casten av enum-etiketten till värden av enum-typen med hjälp av row_number
fönsterfunktion tillgänglig i 8.4 och senare:
SELECT enumlabel, row_number() OVER (ORDER BY enumlabel::test_enum) AS sort_key
FROM pg_catalog.pg_enum
WHERE enumtypid = 'test_enum'::regtype;
Detta ger dig etiketterna sorterade efter en sorteringsnyckel. I äldre Pg-versioner kommer Pg bara att sortera efter oid
av enumvärdena kommer den i nyare versioner att använda enumsortorder, men du behöver inte bry dig på något sätt, du har precis sagt till PostgreSQL "sortera dessa i rätt ordning tack".
Eller om du bara behöver dem i den ordning som servern förväntar sig, skriv:
SELECT enumlabel
FROM pg_catalog.pg_enum
WHERE enumtypid = 'test_enum'::regtype
ORDER BY enumlabel::test_enum