两列中独一无二

时间:2017-12-18 09:08:21

标签: postgresql unique-constraint

假设Postgresql> = 10,有没有办法约束表在两个(或更多)列中具有唯一值?也就是说,值只能出现在一列中。我想尽可能避免触发器。对于单个列,这将是微不足道的。

我们有这张表:

CREATE TABLE foo (
  col1 INTEGER,
  col2 INTEGER
);

所以它应该是

1 2
4 3
5 7

虽然8 4是不可能的,但因为4 3已经存在。

到目前为止,我认为有可能限制EXCLUDE ((ARRAY[col1, col2]) WITH &&),但它似乎不受支持(但是?):

ERROR:  operator &&(anyarray,anyarray) is not a member of operator family "array_ops"

此要求也可能看起来像一个空的内连接表(on a.col1 = b.col2)。我想我可以使用触发器,但我希望尽可能避免它们。

P上。 S.这是a related question

1 个答案:

答案 0 :(得分:1)

我很漂亮的用户this answer非常接近你想要实现的目标,但正如答案中所提到的那样。没有真正的方法可以做到这一点,因为这不是常见做法。 在编程中,当发生类似这样的事情时,最好执行一些数据库重构以找到替代的,更理想的解决方案。 希望能有所帮助!