Acho que você precisará verificar a versão do PostgreSQL e alterar o comportamento adequadamente, ou usar SQL que não toque no catálogo para determinar a ordenação.
Uma ideia para o último, dado o enum fictício:
CREATE TYPE test_enum AS ENUM ('z','x','y');
ALTER TYPE test_enum ADD VALUE 'a' BEFORE 'x';
é
ORDER BY
a conversão do rótulo enum para valores do tipo enum usando o row_number
função de janela disponível na versão 8.4 e mais recente:SELECT enumlabel, row_number() OVER (ORDER BY enumlabel::test_enum) AS sort_key
FROM pg_catalog.pg_enum
WHERE enumtypid = 'test_enum'::regtype;
Isso obtém os rótulos ordenados por uma chave de classificação. Nas versões mais antigas do Pg, o Pg apenas classificará pelo
oid
dos valores enum, em versões mais recentes ele usará o enumsortorder, mas você não precisa se importar de qualquer maneira, você acabou de dizer ao PostgreSQL "ordene-os na ordem correta, por favor". Ou se você só precisa deles na ordem que o servidor espera, escreva:
SELECT enumlabel
FROM pg_catalog.pg_enum
WHERE enumtypid = 'test_enum'::regtype
ORDER BY enumlabel::test_enum