PostgreSQLのバージョンを確認して動作を適切に変更するか、カタログに触れないSQLを使用して順序を決定する必要があると思います。
ダミーの列挙型が与えられた場合の後者のアイデア:
CREATE TYPE test_enum AS ENUM ('z','x','y');
ALTER TYPE test_enum ADD VALUE 'a' BEFORE 'x';
ORDER BY
へ 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
で並べ替えるだけです。 列挙値のうち、新しいバージョンではenumsortorderを使用しますが、どちらの方法でも気にする必要はありません。PostgreSQLに「これらを正しい順序に並べ替えてください」と伝えただけです。
または、サーバーが期待する順序でそれらが必要な場合は、次のように記述します。
SELECT enumlabel
FROM pg_catalog.pg_enum
WHERE enumtypid = 'test_enum'::regtype
ORDER BY enumlabel::test_enum