2016-07-21 40 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 
相關問題