Мисля, че ще трябва да проверите версията на PostgreSQL и да промените поведението по подходящ начин или да използвате SQL, който не докосва каталога, за да определите подреждането.
Идея за последното, дадено фиктивно enum:
CREATE TYPE test_enum AS ENUM ('z','x','y');
ALTER TYPE test_enum ADD VALUE 'a' BEFORE 'x';
е ORDER BY
преобразуване на етикета enum към стойности на типа enum с помощта на row_number
функция за прозорец, налична в 8.4 и по-нови:
SELECT enumlabel, row_number() OVER (ORDER BY enumlabel::test_enum) AS sort_key
FROM pg_catalog.pg_enum
WHERE enumtypid = 'test_enum'::regtype;
Това ви дава етикетите, подредени по ключ за сортиране. В по-старите версии на Pg Pg просто ще сортира по oid
от стойностите на enum, в по-новите версии ще използва enumsortorder, но не е нужно да се интересувате от двата случая, вие току-що казахте на PostgreSQL „сортирайте ги в правилния ред, моля“.
Или ако просто имате нужда от тях в реда, който сървърът очаква, напишете:
SELECT enumlabel
FROM pg_catalog.pg_enum
WHERE enumtypid = 'test_enum'::regtype
ORDER BY enumlabel::test_enum