两列组合的唯一约束?

时间:2016-02-24 21:25:12

标签: sql postgresql

我一直试图弄清楚是否可能对两列的组合有唯一约束。

具体来说,我有两列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)时失败。

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

1 个答案:

答案 0 :(得分:3)

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

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

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