Digamos que eu tenha o Postgres configurado com um modo de espera quente usando os recursos de replicação incorporados. Agora, imagine um cenário onde o datacenter do master perde energia e o slave está em outro datacenter e eu o promovo a master. Mais tarde, o mestre original volta. Neste ponto, eu poderia usar pg_rewind para rebobinar o master original para um estado onde ele pode seguir o novo master. Existe alguma maneira de ver quais alterações o pg_rewind desfez para que eu possa, por exemplo, corrigir manualmente os dados executando novamente as inserções no novo mestre, se for importante?
Se você fez um backup do
pg_xlog
conteúdo do mestre antigo que não foi aplicado no novo mestre após o ponto de divergência , como eles chamam, você pode usarpg_xlogdump
(incluído na distribuição PG desde 9.3) para examinar o conteúdo dos logs de transação no o velho mestre:Infelizmente, o WAL contém apenas as alterações nas páginas físicas no cluster de banco de dados, portanto, atualmente é impossível extrair instruções SQL completas, mas pelo menos isso deve lhe dar uma ideia se o número de alterações feitas foi significativo e se elas atingiram algum relações relevantes.
Você pode usar o campo de saída
xid
como uma indicação de quantas transações foram aplicadas ao mestre antigo desde a divisão, e orel
último número do campo informará a qual relação uma alteração foi aplicada (observepg_class.relfilenode
para descobrir em qual relação exata essa seria):Resumindo, não vai ser uma tarefa fácil, mas é possível tirar pelo menos algumas informações dela.
Outra maneira muito mais fácil seria ativar o log de instrução, mas isso provavelmente custará um pouco, a menos que você esteja armazenando logs em um dispositivo separado para que não afete muito a operação do servidor (
log_min_duration_statement = 0
).