2017-09-23 21 views
4

Nous venons de sauvegarder un serveur primaire sur un serveur de secours avec succès. Cependant, quand nous essayons d'interroger en mode veille à chaud, nous obtenons l'erreur suivante:Les requêtes en lecture seule sur le serveur de secours automatique échouent en raison de l'acquisition de l'ID de transaction

ERROR: cannot assign TransactionIds during recovery 

J'activé le mode bavard et voir l'erreur se produit à varsup.c: 72

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

la chose étrange est , si nous utilisons le client psql et émettons plusieurs requêtes de lecture, la première échouera, mais toutes les suivantes réussiront.

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) 

utilisant postgres 9.5.3

toutes les idées seraient grandement apprécié.

BTW: nous avons ajouté: hot_standby = on à pipelinedb.conf (équivalent à postgresql.conf)

et nous avons ajouté:

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

à recovery.conf

Répondre

1

Nous sommes actuellement en the issue-vous si soigneusement écrit pour nous. Je vais poster une mise à jour ici une fois qu'il est résolu, ce qui ne devrait pas être long

0

utilisation

pg_ctl promote 

pour quitter recove ry mode et reprendre l'opération normale (lecture/écriture).

De l'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

merci pour le conseil Paul, mais nous ne voulons pas la veille chaude pour quitter la récupération. Idéalement, il serait toujours en récupération et aider le primaire/maître à exécuter des requêtes en lecture seule. –