非唯一约束
non UNIQUE constraints
所以,我遇到了这种情况:
我创建了一个 table(比方说 model_a
),在这个 table 中我有 2 个列(比方说 col1
和 col2
)。
我需要一个满足这个现实的约束:
model_a
col1 | col2
-----+-----
1 | 1 //first row
2 | 1 >> ok
1 | 1 >> ok
1 | 2 >> can not insert this row
这不是 UNIQUE 约束,您可以复制第一行。
此约束激活的唯一一次是 col1
相同但 col2
不同。
需要帮助:smile: 非常感谢!
我正在考虑对两列的 least/greatest 值进行唯一索引,它仅适用于值不相等的行:
create unique index myidx
on model_a (least(col1, col2), greatest(col1, col2))
where (col1 <> col2)
insert into model_a (col1, col2) values (1, 1); -- ok
insert into model_a (col1, col2) values (2, 1); -- ok
insert into model_a (col1, col2) values (1, 1); -- ok
insert into model_a (col1, col2) values (1, 2);
-- ERROR: duplicate key value violates unique constraint "myidx"
-- DETAIL: Key (LEAST(col1, col2), GREATEST(col1, col2))=(1, 2) already exists.
所以,我遇到了这种情况:
我创建了一个 table(比方说 model_a
),在这个 table 中我有 2 个列(比方说 col1
和 col2
)。
我需要一个满足这个现实的约束:
model_a
col1 | col2
-----+-----
1 | 1 //first row
2 | 1 >> ok
1 | 1 >> ok
1 | 2 >> can not insert this row
这不是 UNIQUE 约束,您可以复制第一行。
此约束激活的唯一一次是 col1
相同但 col2
不同。
需要帮助:smile: 非常感谢!
我正在考虑对两列的 least/greatest 值进行唯一索引,它仅适用于值不相等的行:
create unique index myidx
on model_a (least(col1, col2), greatest(col1, col2))
where (col1 <> col2)
insert into model_a (col1, col2) values (1, 1); -- ok
insert into model_a (col1, col2) values (2, 1); -- ok
insert into model_a (col1, col2) values (1, 1); -- ok
insert into model_a (col1, col2) values (1, 2);
-- ERROR: duplicate key value violates unique constraint "myidx"
-- DETAIL: Key (LEAST(col1, col2), GREATEST(col1, col2))=(1, 2) already exists.