2016-07-21 37 views
0

我正在创建一个报告引擎,用于在备用服务器上执行几个长查询并用熊猫处理结果。一切工作正常,但有时我有一些问题与使用psycopg2光标这些查询的执行:查询被取消以下消息:由于与恢复冲突导致的postgresql错误 - 取消声明 - psycopg2

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

我研究这个问题

PostgreSQL ERROR: canceling statement due to conflict with recovery

https://www.postgresql.org/docs/9.0/static/hot-standby.html#HOT-STANDBY-CONFLICT

但所有的解决方案都建议修复修改服务器配置的问题。我无法做出这些修改(我们赢得了最后一场对付IT球员的足球比赛:)),所以我想知道如何从开发人员的角度来处理这种情况。我可以使用python代码解决这个问题吗?我的临时解决方案很简单:捕获异常并重试所有失败的查询。也许可以做得更好(我希望如此)。

在此先感谢

回答

4

没有什么可以做,以避免该错误不改变(从PostgreSQL的9.1,你可以设置如要hot_standby_feedbackon)PostgreSQL的配置。

您正在处理的错误在正确的方式–简单地重试失败的交易。

1

在长时间运行的查询正在运行时,热备用从属服务器上的表数据被修改。确保表数据未被修改的解决方案(PostgreSQL 9.1+)是暂停从服务器上的复制并在查询后恢复。

select pg_xlog_replay_pause(); -- suspend 
select * from foo; -- your query 
select pg_xlog_replay_resume(); --resume 
相关问题