PostgreSQL corrompido sem backup é um cenário mais comum do que parece — e não significa perda definitiva dos dados. Além disso, a mensagem de erro pode ser tão genérica que reinstalar o banco parece a única saída. Contudo, na maioria dos casos os dados ainda existem nos arquivos físicos do cluster, e a recuperação forense acessa esse conteúdo sem depender do motor do banco iniciar.
Como o PostgreSQL armazena os dados fisicamente
Para entender a recuperação, é necessário entender onde os dados vivem. O PostgreSQL organiza os dados em um cluster — um diretório definido pela variável PGDATA. Dentro desse diretório, cada tabela e índice corresponde a um ou mais arquivos físicos numerados pelo OID (Object Identifier) do objeto.
Por isso, quando o motor do PostgreSQL não consegue iniciar — por corrupção do pg_control, por WAL inconsistente ou por falha de hardware — os dados ainda existem nesses arquivos físicos. Além disso, a estrutura interna de cada arquivo segue o formato de páginas de 8 KB padrão do PostgreSQL. Portanto, a leitura forense dessas páginas permite extrair os dados sem que o motor precise subir.
Causas mais comuns de corrupção no PostgreSQL
Corrupção do pg_control: o arquivo global/pg_control contém o estado do cluster — última checkpoint, versão do WAL, identificador do sistema. Quando corrompe, o PostgreSQL não consegue determinar se o cluster está em estado consistente e recusa-se a iniciar. Contudo, os datafiles das tabelas permanecem intactos.
WAL corrompido ou incompleto: o Write-Ahead Log registra todas as transações antes de aplicá-las aos datafiles. Quando os arquivos WAL corrompem ou são perdidos — por falta de espaço em disco, shutdown abrupto ou falha de hardware — o PostgreSQL não consegue completar o processo de recovery. Por isso, o banco entra em modo de pânico e para completamente.
Corrupção de página de dados: o PostgreSQL detecta páginas com checksum inválido e recusa lê-las, apresentando o erro invalid page in block X of relation. Além disso, quando a página corrompida pertence a uma tabela crítica do catálogo do sistema, o banco inteiro para. Contudo, a maioria das páginas do arquivo permanece íntegra.
Falha do tablespace: quando um tablespace está em um disco que falhou, o PostgreSQL não consegue acessar as tabelas armazenadas nele. Por isso, o banco pode iniciar parcialmente mas com erros para objetos específicos.
Ransomware: os ransomwares modernos usam criptografia parcial em arquivos grandes. Portanto, arquivos de tablespace com dezenas de gigabytes frequentemente têm apenas os primeiros blocos cifrados — e as páginas de dados internas sobrevivem na maior parte. https://www.crowdertech.com.br/recuperar-ransomware/
O que nunca fazer quando o PostgreSQL não sobe
Não execute pg_resetwal: o utilitário pg_resetwal redefine o WAL e força o cluster a iniciar mesmo com inconsistências. Contudo, ele destrói todas as transações não consolidadas e pode tornar as tabelas ilegíveis. A documentação oficial do PostgreSQL avisa explicitamente que seu uso pode resultar em perda de dados ou corrupção adicional.
Não delete os arquivos WAL manualmente: remover arquivos da pasta pg_wal pensando em “limpar” o WAL quebrado é uma das ações mais destrutivas. Além disso, o PostgreSQL pode ter transações não aplicadas nesses arquivos que ainda podem ser recuperadas.
Não reinstale o PostgreSQL no mesmo diretório: a reinstalação inicializa um novo cluster, sobrescrevendo o pg_control e os arquivos de catálogo. Por isso, elimina completamente a possibilidade de recuperação forense das tabelas originais.
Não use REPAIR de ferramentas não especializadas: ferramentas genéricas de recuperação de banco não entendem o formato interno de páginas do PostgreSQL. Além disso, algumas tentam “corrigir” a corrupção escrevendo dados nos arquivos — exatamente o que pode destruir o que restava.
Como a Crowdertech recupera PostgreSQL corrompido sem backup
O processo começa pela preservação do cluster inteiro — diretório PGDATA completo — sem nenhuma modificação.
Em seguida, a Crowdertech lê os arquivos de catálogo do sistema (pg_class, pg_attribute, pg_type) para reconstruir o esquema do banco: quais tabelas existem, quais colunas cada uma tem e em quais arquivos físicos estão armazenadas.
Depois, percorremos cada arquivo de tabela página a página — 8 KB por vez — identificando quais páginas estão íntegras (checksum válido ou corrupção detectável) e extraindo os dados das tuplas nessas páginas.
Por fim, reconstruímos as tabelas, índices e sequences no formato utilizável, com laudo técnico documentando cada etapa.
Perguntas frequentes sobre recuperação de PostgreSQL
PostgreSQL que não sobe com erro de pg_control tem recuperação? Sim. O pg_control é um arquivo pequeno de metadados — os dados reais estão nos arquivos de tablespace que geralmente estão intactos. A Crowdertech reconstrói o estado do cluster por forense sem precisar do pg_control íntegro.
Erro “invalid page in block” significa perda total? Não. Significa que uma ou mais páginas específicas estão corrompidas. A Crowdertech extrai os dados das páginas íntegras — que representam a grande maioria do arquivo — e documenta quais registros específicos foram perdidos.
WAL perdido significa que as últimas transações sumiram? Depende. Transações ainda não consolidadas nos WAL perdidos são irrecuperáveis. Contudo, as transações já aplicadas aos datafiles permanecem acessíveis por forense. Por isso, a janela real de perda é frequentemente muito menor do que parece.
Quanto tempo leva a recuperação de PostgreSQL sem backup? O diagnóstico é entregue em horas. A recuperação completa de bancos com corrupção parcial leva de 24 a 48 horas na maioria dos casos. Bancos muito grandes ou com corrupção extensiva podem levar mais tempo. https://www.crowdertech.com.br/quanto-custa-recuperacao-de-dados/
Conclusão
PostgreSQL corrompido sem pg_dump não é perda total — é um cenário que exige recuperação forense especializada. Além disso, quanto menos a equipe intervir antes do diagnóstico, maiores as chances de recuperação completa. Em resumo, preserve o cluster, não execute pg_resetwal e acione especialistas imediatamente. PostgreSQL corrompeu? A Crowdertech recupera clusters PostgreSQL sem backup. Veja também recuperação de banco de dados.
Fontes: PostgreSQL Documentation · NIST SP 800-86.