Eu tenho um banco de dados Postgres 9.6 que está corrompido. O hardware em que ele estava rodando ficou ruim e há pelo menos uma página corrompida no banco de dados. Ao executar o pg_dump, recebo o seguinte erro:
pg_dump: WARNING: page verification failed, calculated checksum 24925 but expected 25309
pg_dump: Dumping the contents of table "my_table" failed: PQgetResult() failed.
pg_dump: Error message from server: ERROR: invalid page in block 250471 of relation base/16384/754450
Essa tabela específica é fácil de corrigir, mesmo que haja dados ausentes, portanto, o que eu gostaria de fazer é zerar totalmente essa página e continuar com o banco de dados. Mas não consegui encontrar uma maneira de fazer isso, como digo ao Postgres para ignorar o erro, excluir os dados dessa página e continuar? O próprio pg_dump não parece ter uma opção como esta.
Também gostaria de saber se há mais erros de checksum, mas a ferramenta que encontrei para isso só está presente desde o Postgres 11 e não na minha versão mais antiga.
Como corrijo as páginas ruins removendo todos os dados nelas, para que o banco de dados possa continuar a ser executado e o pg_dump possa ser executado novamente?
Definido
zero_damaged_pages
comoon
, o PostgreSQL tratará cada página com um cabeçalho danificado como uma página vazia e você poderá despejar a tabela.