非唯一约束

non UNIQUE constraints

所以,我遇到了这种情况: 我创建了一个 table(比方说 model_a),在这个 table 中我有 2 个列(比方说 col1col2)。 我需要一个满足这个现实的约束:

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)

Demo on DB Fiddle:

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.