在待机模式下对PostgreSQL数据库运行查询时,我遇到以下错误.导致错误的查询可以正常工作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数据库运行查询时,我遇到以下错误.导致错误的查询可以正常工作1个月,但如果查询时间超过1个月,则会出现错误.
ERROR: canceling statement due to conflict with recovery
Detail: User query might have needed to see row versions that must be removed
有没有关于如何解决的建议?谢谢
在热备用服务器上运行查询有些棘手——它可能会失败,因为在查询过程中,一些需要的行可能会在主服务器上更新或删除.由于主服务器不知道查询是在辅助服务器上启动的,所以它认为可以清理(清除)其行的旧版本.然后,secondary必须重播此清理,并且必须强制取消所有可以使用这些行的查询.
较长的查询将更频繁地被取消.
您可以通过在主服务器上启动一个可重复读取事务来解决这个问题,该事务执行虚拟查询,然后在辅助服务器上运行真正的查询时处于空闲状态.它的存在将防止主服务器上的旧行版本被清空.
有关此主题和其他解决方法的更多信息,请参阅文档中的Hot Standby — Handling Query Conflicts节.