155

テーブルの一部の列にのみ一意性を適用する制約を追加したいと思います。

ALTER TABLE stop ADD CONSTRAINT myc UNIQUE (col_a) WHERE (col_b is null);

上記のWHERE部分は希望的観測です。

これを行う方法はありますか?それとも、リレーショナル ドローイング ボードに戻る必要がありますか?

4

2 に答える 2

266

PostgreSQL は部分的な (つまり条件付きの)UNIQUE制約を定義しませんが、部分的な一意のインデックスを作成できます。

PostgreSQL は一意のインデックスを使用して一意の制約を実装するため、効果は同じですが、重要な注意点がありON CONFLICT DO UPDATEます。一意の制約に対して行うように、一意のインデックスに対してアップサート ( ) を実行することはできません。

また、 にリストされている制約は表示されませんinformation_schema

CREATE UNIQUE INDEX stop_myc ON stop (col_a) WHERE (col_b is NOT null);

部分索引を参照してください。

于 2013-04-26T12:32:43.793 に答える