
Nach
$ pg_dumpall -U postgres -f /tmp/pgall.sql
Ich sehe folgendes:
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
Ich habe keine früheren Backups. Wie kann ich das beheben?
Dank im Voraus.
Antwort1
Dies bedeutet, dass Ihre Datenbank aus irgendeinem Grund grundsätzlich beschädigt ist.
Sie müssen versuchen, Stück für Stück (eine Zeile nach der anderen) auf die Tabelle page_parts zuzugreifen, um zu ermitteln, welche Zeile beschädigt ist, und dann die Zeile löschen. Der wahrscheinlich einfachste Weg hierfür ist, ein SELECT * FROM page_parts LIMIT auszuführen und dies als binäre Suche über die Zeilen in der Tabelle durchzuführen (in der Mitte beginnen, jedes Stück halbieren usw.). Sobald Sie die Zeile identifiziert haben, löschen Sie sie, und Sie sollten in der Lage sein, den Rest der Datenbank zu sichern. Sobald Sie die Zeile haben, können Sie natürlich auch ermitteln, um welche einzelne Spalte es sich handelt, wenn die Daten einen hohen Wert haben.
Antwort2
Danke. Erstellen Sie ein einfaches Skript.
514 -- wähle count(*) aus 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