版本 PG PostgreSQL 16.3。
我需要根据值的范围“1,2,3,4”和 null 在表的几个字段上添加约束。
如果我们已经有 my_field4 填充了 1 或 2 或 3 或 4 的记录,那么我们不能再插入 my_field4 = null 的记录。 此外,如果我们有一条记录 my_field4 填写为 1,那么我们可以插入另一条记录,其值为 my_field4 = 2。
我这样做了,但该限制对于 my_field4 字段具有空值的记录不起作用。
ALTER TABLE sch.my_tbl ADD CONSTRAINT check_auto
exclude (field1 WITH =,field2 WITH =, field3 WITH =, my_field4 WITH =) WHERE ((my_field4 in(1,2,3,4,null)));
例如:
INSERT INTO sch.my_tbl (field1, field2, field3, my_field4) VALUES(1, 'two', 3, 1);--Should be OK
INSERT INTO sch.my_tbl (field1, field2, field3, my_field4) VALUES(1, 'two', 3, 2);--Should be OK
INSERT INTO sch.my_tbl (field1, field2, field3, my_field4) VALUES(1, 'two', 3, null);--Should be unique constraint error
INSERT INTO sch.my_tbl (field1, field2, field3, my_field4) VALUES(2, 'text', 3, null);--Should be OK
INSERT INTO sch.my_tbl (field1, field2, field3, my_field4) VALUES(2, 'text', 3, 1);--Should be unique constraint error
我想禁止插入一条记录,其中 (f1,f2, f3) 对应于现有行,而 f4 只能为值 1,2,3,4 或 null 对于相同的值f1、f2、f3。 如果有录音的话 如何正确构造约束?