PostgreSQL 9.4 更新连接视图规则与唯一约束冲突
PostgreSQL 9.4 Updating rule on joined view with conflict on unique constraint
我有一个由几个表组成的视图,因此为了使其可更新,我创建了一个规则。一切正常,除了我有一个 UNIQUE 字段,有时我有两个在该字段上反转的对象。因此,当我尝试在我的视图上启动更新查询以更正它时,我收到一条错误消息,指出该值已被占用。
我想一个重要的参数是我正在使用第三方软件访问和编辑我的数据库 (QGIS),所以我启动的 UPDATE 查询通常是通过批处理进行的。
我的规则是这样定义的:
CREATE RULE _update AS ON UPDATE TO view DO INSTEAD UPDATE etc...
根据我的理解,该规则逐行工作,因此当它尝试申请第一行时会引发错误,因为显然该值已被采用(只要另一行尚未更新) .是吗?
我猜这是一种很常见的情况,但我不知道如何解决它,而且由于我不是以英语为母语的人,所以我也找不到在线搜索的术语。
有什么办法解决?
谢谢。
如果您将唯一索引设置为 DEFERRABLE INITIALLY DEFERRED
,直到事务结束时才会检查它,而不是检查每个更新的行。
我有一个由几个表组成的视图,因此为了使其可更新,我创建了一个规则。一切正常,除了我有一个 UNIQUE 字段,有时我有两个在该字段上反转的对象。因此,当我尝试在我的视图上启动更新查询以更正它时,我收到一条错误消息,指出该值已被占用。
我想一个重要的参数是我正在使用第三方软件访问和编辑我的数据库 (QGIS),所以我启动的 UPDATE 查询通常是通过批处理进行的。
我的规则是这样定义的:
CREATE RULE _update AS ON UPDATE TO view DO INSTEAD UPDATE etc...
根据我的理解,该规则逐行工作,因此当它尝试申请第一行时会引发错误,因为显然该值已被采用(只要另一行尚未更新) .是吗?
我猜这是一种很常见的情况,但我不知道如何解决它,而且由于我不是以英语为母语的人,所以我也找不到在线搜索的术语。
有什么办法解决?
谢谢。
如果您将唯一索引设置为 DEFERRABLE INITIALLY DEFERRED
,直到事务结束时才会检查它,而不是检查每个更新的行。