我一直试图弄清楚是否可能对两列的组合有唯一约束。
具体来说,我有两列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)
时失败。
这可能吗?或者我必须在插入之前检查组合是否存在?
答案 0 :(得分:3)
您可以使用表达式索引执行此操作:
create unique index unq_test_a_b on (test(least(a, b), greatest(a, b));
我认为unique
约束不允许使用表达式(并且现在没有方便的Postgres进行测试),但这基本上是相同的。