一尘不染

两列组合的唯一约束?

sql

我一直在尝试找出是否有可能对两列的组合具有唯一约束。

具体来说,我有两列A和B。

我有下面这样的行

A     B
1     2

然后我希望以下组合在插入时失败

A     B
1     2
2     1

我尝试添加一个简单的约束

ALTER TABLE test ADD CONSTRAINT test_constraint UNIQUE (a, b);

但这让我(2, 1)(1, 2)已经存在时插入。

这可能吗?还是在插入之前必须检查组合是否存在?


阅读 145

收藏
2021-05-05

共1个答案

一尘不染

您可以使用表达式的索引来执行此操作:

create unique index unq_test_a_b on (test(least(a, b), greatest(a, b));

我不认为unique约束允许表达式(并且现在没有方便的Postgres进行测试),但这本质上是同一回事。

2021-05-05