两列组合的唯一约束条件?

4

我一直在尝试弄清楚是否可以为两个列的组合设置唯一约束。

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

我有如下一行:

A     B
1     2

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

A     B
1     2
2     1

我尝试添加了一个简单的限制条件

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

但是这样当已经存在(1, 2)时,我却可以插入(2, 1)

这种操作可能吗?还是我需要在插入之前检查组合是否已经存在?


在你的例子中,你希望(2,1)失败,因为(1,2)已经存在吗? - Juan Carlos Oropeza
@JuanCarlosOropeza 是的 - honerlawd
1个回答

6

您可以使用表达式索引来实现此目的:

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

我认为unique约束不允许使用表达式(目前没有便利的Postgres来测试),但本质上与此相同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接