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

一意性を強制しないPostgresの一意性制約

    Postgresの一意のインデックスは、等しい値に基づいています 、ただし、NULLは、他のNULLを含め、何にも等しくなることはありません。したがって、deleted_at値がNULLの行は、他の可能な行とは異なります。したがって、任意の数の行を挿入できます。

    これを回避する1つの方法は、部分インデックスを作成することです。 、NULLのある行とない行に異なるルールを適用する:

     CREATE UNIQUE INDEX ... ON subscriptions
     (user_id, class_type_id) WHERE deleted_at IS NULL;
    
     CREATE UNIQUE INDEX ... ON subscriptions
     (user_id, class_type_id, deleted_at) WHERE deleted_at IS NOT NULL;
    


    1. MySQLで再帰的な自己結合を行う方法

    2. mysql pythonコネクタでプリペアドステートメントを実行しようとすると、NotImplementedErrorが発生します

    3. 単一の列を持つテーブルから最初のNを除くすべての行を削除します

    4. OracleExpressでの作成方法について-SQL。列を更新するトリガー