pg_dump: Mensagem de erro do servidor: ERRO: falta o número 0 do bloco para o valor do brinde 43712886 em pg_toast_16418

pg_dump: Mensagem de erro do servidor: ERRO: falta o número 0 do bloco para o valor do brinde 43712886 em pg_toast_16418

Depois

$ pg_dumpall -U postgres -f /tmp/pgall.sql 

Vejo o seguinte:

pg_dump: SQL command failed
pg_dump: Error message from server: ERROR:  missing chunk number 0 for toast value 43712886 in pg_toast_16418
pg_dump: The command was: COPY public.page_parts (id, name, filter_id, content, page_id) TO stdout;
pg_dumpall: pg_dump failed on database "radiant", exiting

Não tenho backups anteriores. Como posso consertar isso?

Desde já, obrigado.

Responder1

Isso significa que seu banco de dados está basicamente corrompido, por algum motivo.

O que você precisa fazer é tentar acessar a tabela page_parts peça por peça (uma linha por vez), para determinar qual linha está corrompida e, em seguida, excluir a linha. A maneira provavelmente mais fácil de fazer isso é fazer um SELECT * FROM page_parts LIMIT e fazer isso como uma pesquisa binária nas linhas da tabela (comece no meio, cortando cada parte ao meio, etc.). Depois de identificar a linha, exclua-a e você poderá despejar o restante do banco de dados. Depois de ter a linha, você também pode identificar qual coluna individual é, é claro, se os dados forem de alto valor.

Responder2

Obrigado. Crie um script simples.

514 -- selecione contagem(*) de page_parts

for ((i=0; i<514; i++ )); do psql -U postgres radiant -c "SELECT * FROM page_parts LIMIT 1 offset $i" >/dev/null || echo $i; done

ERROR: missing chunk number 0 for toast value 43712886 in pg_toast_16418
433

informação relacionada