2017-09-23 95 views
4

,因熱備服務器上的只讀查詢失敗,我們只是成功將一個主服務器備份到熱備服務器上。然而,當我們試圖查詢到雙機熱備,我們得到以下錯誤:由於獲取事務標識

ERROR: cannot assign TransactionIds during recovery 

我啓用詳細模式,並看到varsup.c出現錯誤:72

/* safety check, we should never get this far in a HS standby */ 
if (RecoveryInProgress()) 
    elog(ERROR, "cannot assign TransactionIds during recovery"); 

奇怪的是,如果我們使用psql客戶端併發出多個讀取查詢,第一個將失敗,但所有後續的將成功。

pipeline=# SELECT pg_is_in_recovery(); 
ERROR: cannot assign TransactionIds during recovery 
pipeline=# SELECT pg_is_in_recovery(); 
pg_is_in_recovery 
------------------- 
t 
(1 row) 

使用的Postgres 9.5.3

任何想法將不勝感激它。

BTW: 我們增加了: hot_standby = on到pipelinedb.conf(相當於postgresql.conf中)

和我們說:

primary_slot_name = 'replicator_slot' 
primary_conninfo = 'user=username host=ip_address port=5432' 
recovery_target_timeline = 'latest' 

到的recovery.conf

回答

1

我們正在調查the issue你這麼寫若有所思爲我們。我會在這裏發佈一個更新,一旦它解決了,應該不會很長

0

使用

pg_ctl promote 

退出recove ry模式並恢復正常(讀/寫)操作。

postgresql documentation

In promote mode, the standby server that is running in the specified 
data directory is commanded to exit recovery and begin read-write 
operations. 
+0

感謝提示保羅,但我們不希望熱備用退出恢復。理想情況下,它始終處於恢復狀態,並幫助主/主機運行只讀查詢。 –