错误:重复的键值违反了 postgreSQL 中的唯一约束

2024-05-04

我在更新表时遇到 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 会检查约束并在更新第二行之前抛出错误。

有没有办法避免这种情况呢?


http://www.postgresql.org/docs/9.0/static/sql-createtable.html http://www.postgresql.org/docs/9.0/static/sql-createtable.html在“非延迟唯一性约束”部分中 - “当 UNIQUE 或 PRIMARY KEY 约束不可延迟时,每当插入或修改行时,PostgreSQL 都会立即检查唯一性。”

将唯一约束更改为可延迟将推迟检查,直到更新结束。要么使用 SET CONSTRAINTS 在会话级别禁用(这是烦人的重复),要么使用可延迟选项删除并重新创建唯一性约束(我不知道 ALTER 构造可以在不删除的情况下执行此操作)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

错误:重复的键值违反了 postgreSQL 中的唯一约束 的相关文章

随机推荐