1. ホーム
  2. postgresql

[解決済み] Postgresql。条件付き一意性制約

2022-04-27 21:06:26

質問

テーブルの一部のカラムにのみ一意性を強制する制約を追加したいのですが、どうすればいいですか?

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

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

何か良い方法はないでしょうか?それとも、リレーショナルな図面に戻るべきでしょうか?

どのように解決するのですか?

PostgreSQLでは、部分的な(つまり条件付きの) UNIQUE 制約 - しかし、あなたは できる 部分的に一意な インデックス .

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

また、制約のリストが information_schema .

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

参照 パーシャルインデックス .