単純なテーブルがあると想像してください:
name | is_active
----------------
A | 0
A | 0
B | 0
C | 1
... | ...
次の状況で失敗する特別な一意の制約を作成する必要があります。異なるis_active
値を同じname
値に共存させることはできません。
許可される条件の例:
注:単純な複数列の一意のインデックスでは、このような組み合わせは許可されません。
A | 0
A | 0
B | 0
許可される条件の例:
A | 0
B | 1
失敗した状態の例:
A | 0
A | 1
-- should be prevented, because `A 0` exists
-- same name, but different `is_active`
理想的には、一意の制約または一意の部分インデックスが必要です。トリガーは私にとってより問題です。
ダブルはA,0
許可されて(A,0) (A,1)
いますが、許可されていません。
ERROR: data type boolean has no default operator class for access method "gist"