Ich denke, Sie müssen die PostgreSQL-Version überprüfen und das Verhalten entsprechend ändern oder SQL verwenden, das den Katalog nicht berührt, um die Reihenfolge zu bestimmen.
Eine Idee für letzteres, gegebenes Dummy-Enum:
CREATE TYPE test_enum AS ENUM ('z','x','y');
ALTER TYPE test_enum ADD VALUE 'a' BEFORE 'x';
ist ORDER BY
die Umwandlung des Enum-Labels in Werte des Enum-Typs unter Verwendung von row_number
Fensterfunktion verfügbar in 8.4 und neuer:
SELECT enumlabel, row_number() OVER (ORDER BY enumlabel::test_enum) AS sort_key
FROM pg_catalog.pg_enum
WHERE enumtypid = 'test_enum'::regtype;
Dadurch erhalten Sie die Etiketten, die nach einem Sortierschlüssel geordnet sind. In älteren Pg-Versionen sortiert Pg nur nach dem oid
der Enum-Werte, in neueren Versionen wird es die enumsortorder verwenden, aber Sie müssen sich so oder so nicht darum kümmern, Sie haben PostgreSQL gerade gesagt:"Sortieren Sie diese bitte in der richtigen Reihenfolge".
Oder wenn Sie sie nur in der vom Server erwarteten Reihenfolge benötigen, schreiben Sie:
SELECT enumlabel
FROM pg_catalog.pg_enum
WHERE enumtypid = 'test_enum'::regtype
ORDER BY enumlabel::test_enum