Ele está procurando um registro de ponto de verificação no log de transações que provavelmente não existe ou está corrompido. Você pode determinar se esse é o caso executando:
# Postgres >= 10
pg_resetwal DATADIR
# Postgres < 10
pg_resetxlog DATADIR
Se o log de transações estiver corrompido, você verá uma mensagem como:
O servidor de banco de dados não foi encerrado corretamente. A redefinição do log de transações pode fazer com que os dados sejam perdidos. Se você quiser continuar de qualquer maneira, use-f
para forçar a reinicialização.
Você pode seguir as instruções e executar com
-f
para forçar a atualização:# Postgres >= 10
pg_resetwal -f DATADIR
# Postgres < 10
pg_resetxlog -f DATADIR
Isso deve redefinir o log de transações, mas pode deixar seu banco de dados em um estado indeterminado, conforme explicado na documentação do PostgreSQL em
pg_resetwal
:
Sepg_resetwal
reclama que não pode determinar dados válidos parapg_control
, você pode forçá-lo a continuar de qualquer maneira especificando o-f
(força) opção. Nesse caso, os valores plausíveis serão substituídos pelos dados ausentes. Espera-se que a maioria dos campos corresponda, mas a assistência manual pode ser necessária para os campos OID seguinte, ID de transação seguinte e época, ID e deslocamento de multitransação seguinte e localização inicial do WAL. Esses campos podem ser definidos usando as opções discutidas abaixo. Se você não conseguir determinar os valores corretos para todos esses campos,-f
ainda pode ser usado, mas o banco de dados recuperado deve ser tratado com ainda mais suspeita do que o habitual:um dump e recarregamento imediatos são imperativos. Não execute nenhuma operação de modificação de dados no banco de dados antes de fazer o dump, pois tal ação provavelmente piorará a corrupção.