两列组合的唯一约束?

hon*_*awd 3 sql postgresql

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

具体来说,我有两列 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)已经存在时插入。

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

Gor*_*off 5

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

create unique index unq_test_a_b on (test(least(a, b), greatest(a, b));
Run Code Online (Sandbox Code Playgroud)

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