うーん。一意の制約は、複数の NULL 値を妨げません。
CREATE TABLE mytable (
table_identifier_a INTEGER NULL,
table_identifier_b INTEGER NOT NULL,
table_value1 INTEGER NOT NULL,
UNIQUE(table_identifier_a, table_identifier_b)
);
identifier_b が一致する場合でも、複数の NULL を挿入できることに注意してください。
test=# INSERT INTO mytable values(NULL, 1, 2);
INSERT 0 1
test=# INSERT INTO mytable values(NULL, 1, 2);
INSERT 0 1
test=# select * from mytable;
table_identifier_a | table_identifier_b | table_value1
--------------------+--------------------+--------------
| 1 | 2
| 1 | 2
(2 rows)
ただし、重複する (a,b) ペアを作成することはできません。
test=# update mytable set table_identifier_a = 3;
ERROR: duplicate key value violates unique constraint "mytable_table_identifier_a_key"
もちろん、問題があります。テーブルに主キーがありません。おそらくデータ モデルに問題があります。しかし、あなたはそれを修正するのに十分な詳細を提供しませんでした.