Pesquisa avançada

FAQ – Correção de Banco PostgreSQL Corrompido (Erro pg_xact)

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?

ERROR: could not access status of transaction 3338423032 Could not open file "pg_xact/0C6F": No such file or directory. SQL state: 58P01

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?

  1. Fechar todos os sistemas conectados ao banco

  2. Parar o serviço do PostgreSQL no Windows

  3. 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:

 
DROP TABLE public.mv_carga;
DROP TABLE public.mv_carga_bi;
DROP TABLE public.mv_carga_integracoes;
DROP TABLE public.mv_carga_mglista;
DROP TABLE public.mv_carga_mix;
DROP TABLE public.mv_carga_pilarcoletor;
DROP TABLE public.mv_carga_scanntech;
DROP TABLE public.mv_carga_scanntech_log;
DROP TABLE public.log_exportacao;
DROP TABLE public.log_importacao;
DROP TABLE public.ciot;
DROP TABLE public.tab_config_importacao;
DROP TABLE public.tblocal;
DROP TABLE public.tboperacao;

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:

C:\Program Files\PostgreSQL\12\data\pg_xact

5️⃣ Recriar arquivos de transação ausentes

Execute um comando por vez:

dd if=/dev/zero of=0C6F bs=256k count=1
dd if=/dev/zero of=0000 bs=256k count=1

Esses arquivos recriam os registros de transação corrompidos ou inexistentes.


6️⃣ Executar manutenção do banco

Após o banco subir, execute:

VACUUM FULL;
REINDEX DATABASE gestores; 

Se necessário, faça também tabela por tabela :

REINDEX TABLE nome_da_tabela;

7️⃣ Backup e reinstalação recomendada (boa prática)

Mesmo com o banco funcionando, recomenda-se:

  1. Fazer backup lógico (via sistema ou pg_dump)

  2. Instalar uma nova instância do PostgreSQL

  3. 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:

DROP TABLE versao;

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.