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

PostgreSQLに条件付き一意インデックスを追加する方法

    UNIQUEを作成します (product_id, variant_id)の複数列のインデックス :

    CREATE UNIQUE INDEX line_items_prod_var_idx ON line_items (product_id, variant_id);
    

    ただし、これにより、(1, NULL)の複数のエントリが許可されます。 (product_id, variant_id)の場合 NULL 値は同一とは見なされません。
    これを補うために、部分的なUNIQUEを追加で作成します。 product_idのインデックス :

    CREATE UNIQUE INDEX line_items_prod_var_null_idx ON line_items (product_id)
    WHERE variant_id IS NULL;
    

    このようにして、(1,2)と入力できます。 、(1,3) および(1, NULL) 、しかしそれらのどちらも二度目ではありません。また、一方または両方の列に条件があるクエリを高速化します。

    dba.SEに関する最近の関連する回答で、あなたのケースにほぼ直接当てはまります:

    • PostgreSQLの複数列の一意性制約とNULL値


    1. CTEから挿入

    2. EntityFramework4およびコードファースト開発CTPでのMySqlの使用

    3. Oracle:クエリで合計のパーセントを取得する方法は?

    4. Pythondatetime.datetimeオブジェクトをMySQLに挿入する