PostgreSQL错误:由于与恢复冲突而取消语句

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (132)

在备用模式下在PostgreSQL db上运行查询时,我会得到以下错误。导致错误的查询工作时间为1个月,但当查询时间超过1个月时,则会产生错误结果。

ERROR: canceling statement due to conflict with recovery
Detail: User query might have needed to see row versions that must be removed

对如何解决有什么建议吗?谢谢

提问于
用户回答回答于

在热备用服务器上运行查询有点棘手--可能会失败,因为在查询期间,可能会在主服务器上更新或删除一些所需的行。由于主查询不知道查询是在次要程序上启动的,所以它认为它可以清除(真空)旧版本的行。然后,备用必须重播此清理,并强制取消所有可以使用这些行的查询。

较长的查询将更频繁地被取消。

可以通过在主服务器上启动可重复的读取事务来解决这个问题,它执行一个虚拟查询,然后在二级上运行一个真正的查询时处于空闲状态。它的存在将防止在主版上清除旧行版本。

用户回答回答于

没有必要在主服务器上启动空闲事务。在Postgresql-9.1中,解决此问题的最直接方法是通过设置

hot_standby_feedback = on

这将使主程序知道长期运行的查询。

第一个选项是将参数设置为“热”。_待机_反馈,它防止真空移除最近死亡的行,因此不会发生清理冲突.

为什么这不是默认的呢?此参数是在初始实现之后添加的,这是备用设备影响主服务器的唯一方法。

扫码关注云+社区