pg_dump: Fehlermeldung vom Server: FEHLER: fehlender Block Nummer 0 für Toast-Wert 43712886 in pg_toast_16418

pg_dump: Fehlermeldung vom Server: FEHLER: fehlender Block Nummer 0 für Toast-Wert 43712886 in pg_toast_16418

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

verwandte Informationen