Esta FAQ tem como objetivo orientar parceiros técnicos a corrigirem erros de corrupção no PostgreSQL relacionados ao diretório pg_xact.
Qual erro esse procedimento resolve?
Esse erro ocorre quando o PostgreSQL não encontra arquivos de controle de transação, normalmente após:
-
Queda de energia
-
Travamento do servidor
-
Encerramento forçado do serviço
-
Problemas em disco
⚠️ Esse procedimento é seguro?
É um procedimento emergencial
Pode haver perda parcial de dados de carga/log
Backup da pasta data é altamente recomendado antes de iniciar
Use somente quando o banco não inicia ou apresenta erro constante de transação.
Quais ferramentas são necessárias?
-
Windows
-
PostgreSQL 12
-
Cmder (para usar comando
dd) -
Acesso Administrador no servidor
O que deve ser feito antes de iniciar?
-
Fechar todos os sistemas conectados ao banco
-
Parar o serviço do PostgreSQL no Windows
-
Garantir que ninguém esteja usando a base
Passo a passo para correção
1️⃣ Instalar terminal compatível
Instale o Cmder (ou similar) para permitir comandos Linux no Windows.
2️⃣ Remover tabelas de carga e log
Acesse o banco via psql ou ferramenta gráfica e execute:
Essas tabelas geralmente concentram transações abertas e inconsistentes.
3️⃣ Abrir e fechar o sistema
-
Abra o sistema normalmente
-
Feche o sistema logo em seguida
Isso força o PostgreSQL a tentar reorganizar o controle interno e recria as tabelas Excluidas.
4️⃣ Acessar o diretório pg_xact
Abra o Cmder e acesse:
5️⃣ Recriar arquivos de transação ausentes
Execute um comando por vez:
Esses arquivos recriam os registros de transação corrompidos ou inexistentes.
6️⃣ Executar manutenção do banco
Após o banco subir, execute:
Se necessário, faça também tabela por tabela :
7️⃣ Backup e reinstalação recomendada (boa prática)
Mesmo com o banco funcionando, recomenda-se:
-
Fazer backup lógico (via sistema ou
pg_dump) -
Instalar uma nova instância do PostgreSQL
-
Restaurar o backup na nova base
? Isso elimina resíduos de corrupção interna.
8️⃣ Ajuste final do sistema
Remova a tabela de versão:
Abra o sistema novamente.
Se ocorrerem erros:
-
Identifique dados faltantes
-
Exporte da base antiga
-
Importe na nova base
Quando considerar o problema resolvido?
-
Banco inicia sem erro
-
Sistema abre normalmente
-
Não há mais mensagens relacionadas a
pg_xact -
Operações básicas funcionam corretamente
Quando NÃO usar esse procedimento?
-
Banco ainda inicia normalmente
-
Erros apenas de consulta SQL
-
Problemas de permissão (
permission denied) -
Ambientes com replicação ativa
Observações finais
-
Procedimento validado para PostgreSQL 12
-
Para versões mais novas, o processo é similar
-
Em casos graves, pode ser necessário uso do
pg_resetwal.