postgresql - 错误 : duplicate key value violates unique constraint in postgreSQL

标签 postgresql

我在更新表时遇到 postgresql 中的唯一约束问题。我有一个包含 3 列的表和对其中一列(internal_state)的唯一约束。该表将只有两列,internal_state 的值为 1,0。 更新查询是

UPDATE backfeed_state SET internal_state = internal_state - 1<br/> 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在“非延迟唯一性约束”部分 - “当 UNIQUE 或 PRIMARY KEY 约束不可延迟时,PostgreSQL 会在插入或修改行时立即检查唯一性。”

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

关于postgresql - 错误 : duplicate key value violates unique constraint in postgreSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6651341/

相关文章:

Postgresql 查询没有终止,重启后服务 postgresql 没有启动

sql - 如何改进这个条件 UPDATE 查询?

sql - 主键的顺序扫描和索引扫描返回不同的行

postgresql - 存储后端如何影响 Datomic?

ruby-on-rails - self.table_name 在具有不同 rails 模式的模型中不起作用

sql - 如何查询UNION查询的结果

sql - PGSQL - 如何在另一个查询中使用 select 语句的输出?

postgresql - monetdb 中的字符串函数

sql - 在触发器执行之前数据库关闭会发生什么?

postgresql - 允许将 RefCursor 作为 Postgresql 函数的 OUT 参数吗?