【发布时间】:2011-07-11 14:06:35
【问题描述】:
我在更新表时在 postgresql 中遇到了一个独特的约束问题。我有一个包含 3 列的表,并且在其中一列(internal_state)上有一个唯一约束。该表将只有两列,internal_state 的值为 1,0。 更新查询是
UPDATE backfeed_state SET internal_state = internal_state - 1
WHERE EXISTS (SELECT 1 FROM backfeed_state d2 WHERE d2.internal_state = 1 )
在 MSSqlserver 中运行此查询很好,但在 postgre 中它会引发唯一约束错误。 我的理解是在更新所有行之后在 SQLServer 中,然后只检查列上的约束,但在更新每一行后在 postgre 中,正在检查约束。因此,在更新第一行(internal_state 值从 1 到 0)之后,postgre 甚至在更新第二行之前检查约束并抛出错误。
有没有办法避免这种情况?
【问题讨论】:
标签: postgresql