Mon*_*tes 3 sql postgresql check-constraints exclude-constraint
给出以下架构
CREATE TABLE test (
value text,
flag bool
);
Run Code Online (Sandbox Code Playgroud)
这是否可能,创建这样的约束,该约束将允许具有相同value和的重复行flag = true,但最多允许具有给定value和 的行flag = false
例如
这些应该执行没有错误
INSERT INTO test (value, flag) VALUES ('1', true);
INSERT INTO test (value, flag) VALUES ('1', true);
INSERT INTO test (value, flag) VALUES ('1', true);
INSERT INTO test (value, flag) VALUES ('1', true);
Run Code Online (Sandbox Code Playgroud)
INSERT INTO test (value, flag) VALUES ('1', true);
INSERT INTO test (value, flag) VALUES ('1', true);
INSERT INTO test (value, flag) VALUES ('1', false);
Run Code Online (Sandbox Code Playgroud)
INSERT INTO test (value, flag) VALUES ('1', false);
INSERT INTO test (value, flag) VALUES ('1', true);
Run Code Online (Sandbox Code Playgroud)
这应该会引发错误
INSERT INTO test (value, flag) VALUES ('1', false);
INSERT INTO test (value, flag) VALUES ('1', false);
Run Code Online (Sandbox Code Playgroud)
我尝试过EXCLUDE限制性地玩游戏,但无法使其发挥作用。
您正在寻找唯一的部分索引:
create unique index no_false_duplicates on test (value, flag) where not flag
Run Code Online (Sandbox Code Playgroud)
当然,你必须弄清楚你想对null价值观做什么。flag我建议自始至终创建该flag专栏not nullnull布尔值很少是您想要的。
有关详细信息,请参阅创建索引文档。
| 归档时间: |
|
| 查看次数: |
445 次 |
| 最近记录: |