PostgreSQL - Recuperando uma base de dados corrompida

Quando o serviço do PostgreSQL é deixado para inicializar automaticamente, um dos problemas que pode acontecer é corromper algum arquivo da base de dados quando o sistema operacional é inicializado incorretamente. Este é um dos principais motivos, porém poderá ocorrer por outros.

Isso deixa muita gente de cabeça quente, imaginando que seus dados foram perdidos, e saem correndo desesperadamente procurando por alguma solução.

Se por algum acaso quando for iniciar o serviço do banco e aparecer a seguinte mensagem: "Não foi possível iniciar o serviço PostgreSQL", não se preocupe, tente a solução descrita nas etapas abaixo, quem sabe pode ser útil e a "salvar sua vida". Agora se mesmo assim não conseguir recuperar, (ai sim) comece a preocupar-se bastante!

Então vamos lá!

1 - Faça um backup da pasta data que localiza-se no diretório de instalação do PostgreSQL.


2 - Verifique se existe um PostgreSQL instalado, caso sim, desinstale por completo.


3 - Instale o PostgreSQL utilizando as mesmas configurações de usuário e senha.


4 - Depois de concluído a instalação, voltaremos aos poucos os arquivos salvos da pasta data para a pasta do novo diretório PostgreSQL, parando o serviço, copiando um diretório, e inicializando o serviço, fazendo isto para as pastas necessárias, ficando da seguinte forma:

Parar o serviço.

Copiar a pasta base, colar no novo diretório (substituir tudo).

Iniciar o serviço.

Parar o serviço.

Copiar a pasta pg_xlog, colar no novo diretório (substituir tudo).

Iniciar o serviço.

Parar o serviço.

Copiar a pasta pg_clog, colar no novo diretório (substituir tudo).

Iniciar o serviço.

Parar o serviço.

Copiar a pasta pg_log, colar no novo diretório (substituir tudo).

Iniciar o serviço.

Parar o serviço.

Copiar a pasta global, colar no novo diretório (substituir tudo).

Iniciar o serviço.

Ao terminar os passos acima, verifique pelo pgAdmin ou pelo seu programa de gerenciamento preferencial, se a sua base de dados estará lá e completo. Lembrando que se não for feito esse procedimento de parar o serviço, copiar/colar a pasta e iniciar o serviço, a base não irá ficar com todas as informações necessárias.

Por favor caro amigo, sempre faça um backup da sua base de dados, as vezes pode acontecer de "ferrar" com tudo mesmo, agora tendo uma cópia, as coisas ficam bem mais fáceis e você poderá trabalhar tranquilamente.

Daqui a alguns dias postarei um simples script para gerar um backup automatizado do PostgreSQL.

Até a próxima!

Comentários

  1. Muito obrigado, dica útil e funcionou comigo perfeitamente.

    ResponderExcluir
  2. Muito Obrigado! Tinha feito várias outras tentativas e com sua dica consegui recuperar o banco.

    ResponderExcluir
  3. Olá, tenho um problema parcialmente parecido. Os arquivos pg_filenode.map foram criptografados por Ransomware.

    Tem um banco de teste rodando com as mesmas bases de dados, porém este banco está desatualizado.

    As pastas dentro da pasta base são nomeadas por uma sequencia de números, porém devido ao tamanho das pastas eu consigo identificar a quais bases elas se referem.

    A pergunta é: posso utilizar o arquivo pg_filenode.map das bases desatualizadas para a pasta que quero recuperar?

    Obrigado.

    ResponderExcluir
  4. Aqui não funcionou, o serviço não inicia depois de copiar a pasta global.

    ResponderExcluir
    Respostas
    1. Você já tentou excluir os arquivos postmaster.opts e .pid, comigo aconteceu isso aí excluir esses arquivos e iniciou o serviço.

      Excluir
    2. Estou com o mesmo problema, não levanta o serviço após substituir a pasta global, já excluí os arquivos postmaster

      Sugestão?

      Excluir
    3. Aconteceu comigo também, já exclui os arquivos postmaster.pid e .opts, não consegue iniciar o serviço, coloco as permissões que falta, segundo o /pg_log/startup.log, mesmo assim não inicia

      Excluir
    4. COMIGO DEU ERRO APOS COPIAR A PASTA GLOBAL, ENTÃO INICIEI O PROCESSO NOVAMENTE E AO INVÉS DE COPIAR A PASTA GLOBAL TODA COPIEI APENAS OS ARQUIVOS (COM DESCRIÇÃO NUMÉRICA EX: 11877,11877_fsm até 12134, sem copiar os arquivos config e pg_) e iniciei o serviço porem iniciou com a senha padrão ai fechei tudo e parei o serviço e colei a pasta data toda e iniciei o serviço e só assim consegue recuperar.

      Excluir
    5. Estou c mesmo problema..alguém conseguiu resolver?

      Excluir
  5. Este comentário foi removido pelo autor.

    ResponderExcluir
  6. pg_dump: copiando conteúdo da tabela estq_sai_it_grade
    pg_dump: Cópia do conteúdo da tabela "estq_sai_it_grade" falhou: PQgetResult() falhou.
    pg_dump: Mensagem de erro do servidor: ERRO: não pôde acessar status da transação 2450952460
    DETALHE: não pôde abrir arquivo "pg_clog/0921": No such file or directory.
    pg_dump: O comando foi: COPY public.estq_sai_it_grade (cd_emp, cd_un_emp, cd_sai, cd_barra, cd_prod, cd_cor, cd_tam, st_it, qtde_it, qtde_prodc_it, preco_it, tx_desc_it, vl_desc_it, tx_icms_it, tx_red_it, tx_ipi_it, vl_to_it, sts_it, nr_rems, nr_ord_prodc, nr_fat, nr_nf, cd_mot, dt_canc, qtde_canc_it, qtde_danif_it, vl_abat_it, qtde_consg_dev_it, preco_custo_it, obs_it, qtde_subst_it, nr_transf, cd_st, qtde_consg_vend_it, valordescontosituacao, valordescontorodape, valorliquido, valorabatimento, valorabatimentoitem) TO stdout;

    Process returned exit code 1.

    Sabe como resolver um problema assim?

    ResponderExcluir
  7. Bom dia pessoal, comigo deu o msm erro depois que copiei a pasta Global... alguem ? obg!!

    ResponderExcluir
  8. Pessoal o meu aqui quando subo o BD. aparece aquela mensagem de BD corrompido. ''
    FATAL: database ''integratto2'' does not exist
    DETAL: The database subdirectory ''base/16393'' is missing.

    ALGUEM PODERIA ME AJUDAR POR FAVOR. JA NAO SEI MAIS O QUE FAZER E NAO TENHO BCKP DO BD.

    ResponderExcluir

Postar um comentário