
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