Os colegas de trabalho estavam tentando extrair uma cópia do banco de dados PostgreSQL de um backup feito em hot standby na versão 9.1, mas não era confiável - nós o executávamos diariamente, mas geralmente acabava com vários erros durante a execução de consultas na cópia.
Infelizmente, não consegui encontrar uma resposta definitiva sobre o motivo na web e precisei de uma boa alma no canal IRC do PostgreSQL para me esclarecer - fazer um backup como esse de um modo de espera não é suportado fora de -the-box nessa versão.
Portanto, para o benefÃcio de outras pessoas que podem ter o mesmo problema e tentar pesquisá-lo no Google, escreverei nossas notas em uma resposta abaixo.
A resposta conterá duas seções - primeiro, o que é aceitável ver nos logs após a restauração e, segundo, alguns exemplos do que não é. A primeira seção deve ser bastante determinÃstica, enquanto a segunda é basicamente uma variedade aleatória de tudo o que aconteceu conosco que indica que tivemos um problema.
SaÃda de registro aceitável
no começo:
É importante ver que o PostgreSQL restaurador sabe quando foi a última vez. Acho que é assim porque significa que está começando de um posto de controle.
pedido de recuperação xlog min ... passou do ponto atual
Logo no inÃcio, alguns destes podem acontecer:
Mas de acordo com http://www.postgresql.org/message-id/CAB7nPqTd43hqpuC+M8fo+xkqHv1WtFe_16NUttu1pHcBtZhZmw@mail.gmail.com isso é inofensivo
FATAL: o sistema de banco de dados está inicializando
Qualquer número destes pode acontecer:
Na verdade, isso deve ser inofensivo porque, em nosso caso, foi o resultado de
SELECT 1
consultas automatizadas do tipo ping que os scripts executam para verificar se o PostgreSQL está pronto.pageaddr inesperado ... no arquivo de log ..., segmento ..., deslocamento ...
No final tem isso:
Mas de acordo com http://www.postgresql.org/message-id/CAGrpgQ-BbXUNErrAtToYhRyUef9_GdUQz1T3CXbpTMLTnuKANQ@mail.gmail.com isso também é inofensivo
Observe que pode haver mais restaurações WAL após esse ponto:
Isso significaria apenas que você forneceu mais arquivos WAL por meio
recovery.conf
do que o estritamente necessário.00000002.history: Esse arquivo não existe
Bem no final do processo de desenrolamento do WAL, há o seguinte:
Isso é aparentemente/esperançosamente irrelevante, porque é aà que o banco de dados restaurado (clone) começa uma nova vida (linha do tempo).
SaÃda de registro inaceitável
no começo:
Isso é crÃtico - significa que o processo de backup não foi iniciado no momento certo - após um ponto de
pg_start_backup(...)
verificação - em vez disso, o banco de dados estava funcionando normalmente e estava em algum ponto aleatório, o que significa que essa restauração é mais semelhante à restauração de um banco de dados com falha.pedaço faltando em pg_toast...
Isso indica que a restauração não estava correta. Como uma solução rápida, tentamos a receita de http://postgresql.nabble.com/select-table-indicate-missing-chunk-number-0-for-toast-value-96635-in-pg-toast-2619- td5682176.html
Às vezes, isso pode colocar a tabela de volta em um estado de funcionamento, mas às vezes também não tem esse efeito. Depois disso, cutucamos um pouco mais e pensamos que descobrimos que é apenas pg_statistic, que é descartável:
o link esquerdo do irmão direito não corresponde
Tentamos contornar isso rapidamente fazendo:
não foi possÃvel ler o bloco no arquivo...
Isso foi obviamente uma chatice. Não poderÃamos contornar isso rapidamente:
Esse foi um bom indicador de que muitos dados estavam sendo "perdidos".
o valor da chave duplicada viola a restrição exclusiva "pg_type_typname_nsp_index"
Este foi outro indicador de que a restauração foi interrompida:
O truque rápido para isso foi mover a posição da sequência: