sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQL9.0と9.1の列挙型リテラルの順序の違い

    PostgreSQLのバージョンを確認して動作を適切に変更するか、カタログに触れないSQLを使用して順序を決定する必要があると思います。

    ダミーの列挙型が与えられた場合の後者のアイデア:

    CREATE TYPE test_enum AS ENUM ('z','x','y');
    ALTER TYPE test_enum ADD VALUE 'a' BEFORE 'x';
    

    ORDER BYrow_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
    



    1. OracleのXMLTypeがNull値の列のタグを生成しない

    2. SQLServerのネストされたトランザクションでエラーを処理する方法

    3. 非同期fnのモジュールエクスポート結果

    4. SQL ServerONDELETEトリガー