我一直在试图弄清楚是否有可能对两列的组合有一个唯一的约束。
具体来说,我有两列 A 和 B。
我有一排像下面
A B
1 2
Run Code Online (Sandbox Code Playgroud)
然后我希望以下组合在插入时失败
A B
1 2
2 1
Run Code Online (Sandbox Code Playgroud)
我试过添加一个简单的约束
ALTER TABLE test ADD CONSTRAINT test_constraint UNIQUE (a, b);
Run Code Online (Sandbox Code Playgroud)
但这让我(2, 1)在(1, 2)已经存在时插入。
这是可能的吗?或者我必须在插入之前检查组合是否存在?
您可以使用表达式上的索引来执行此操作:
create unique index unq_test_a_b on (test(least(a, b), greatest(a, b));
Run Code Online (Sandbox Code Playgroud)
我不认为unique约束允许表达式(并且现在没有方便的 Postgres 来测试),但这本质上是一样的。