【问题标题】:UNIQUE constraint across multiple columns跨多个列的唯一约束
【发布时间】:2020-09-24 19:17:39
【问题描述】:

我需要一个跨越 2 列的 UNIQUE 约束,但在任何地方都允许 NULL 值。我有这个:

CREATE TABLE table_1{
  COLUMN a INT SET DEFAULT NULL,
  COLUMN b INT SET DEFAULT NULL
 -- <insert constraint here>
}

一些例子:

a  b
1  2
3  4
valid
a  b
1  1
2  3
invalid
a  b
1  2
1  3
invalid
a  b
1  2
3  1
invalid
a  b
1  2
3  NULL
valid
a  b
1  2
3  NULL
4 NULL
NULL 5
valid

【问题讨论】:

标签: sql postgresql database-design unique-constraint


【解决方案1】:

修改@a_horse_with_no_name 建议

create table table_1(a int default null, b int default null);
ALTER TABLE table_1
    ADD CONSTRAINT excl exclude using gist ( (array_remove(array[a, b],NULL)) with &&);

这适用于 NULLable 列

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-23
    • 1970-01-01
    • 2021-12-13
    • 2012-05-07
    • 2018-09-14
    • 1970-01-01
    • 2012-08-10
    相关资源
    最近更新 更多