回答:
PostgreSQLは部分的(つまり、条件付き)UNIQUE
制約を定義していません。ただし、部分的に一意のインデックスを作成できます。PostgreSQLは一意のインデックスを使用して一意の制約を実装しているため、効果は同じで、にリストされている制約は表示されません。information_schema
CREATE UNIQUE INDEX stop_myc ON stop (col_a) WHERE (col_b is NOT null);
部分インデックスを参照してください。
ERROR: duplicate key value violates unique constraint "stop_myc"
PGは部分的(つまり、条件付き)UNIQUE制約を定義しないと既に述べられています。また、ドキュメントには、一意の制約をテーブルに追加する好ましい方法は一意のインデックスであると記載されていますADD CONSTRAINT
テーブルに一意性制約を追加するための推奨される方法は、ALTER TABLE ... ADD CONSTRAINTです。インデックスを使用して一意の制約を適用することは、直接アクセスしてはならない実装の詳細と考えることができます。ただし、一意の列に手動でインデックスを作成する必要がないことに注意してください。これにより、自動的に作成されたインデックスが複製されます。
除外制約を使用してそれを実装する方法があります(このソリューションについては@dukelionに感謝)
あなたの場合は次のようになります
ALTER TABLE stop ADD CONSTRAINT myc EXCLUDE (col_a WITH =) WHERE (col_b IS null);