两列中独一无二

问题描述 投票:2回答:1

假设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

postgresql unique-constraint
1个回答
1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.