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