Ich verwende PostgreSQL 8.4.15. Beim Ausführen pg_dumpzum Sichern einer Datenbank wurde der folgende Fehler angezeigt:
pg_dump: SQL command failed
pg_dump: Error message from server: ERROR: missing chunk number 0 for toast value 123456789 in pg_toast_987654321
pg_dump: The command was: COPY public.my_table (id, .... all the columns ...)
Bei der Suche nach dieser Fehlermeldung habe ich einige Referenzen ( hier und hier ) gefunden, die vorgeschlagen haben, die Tabelle neu zu indizieren. (In diesen Diskussionen gab es einen Verweis auf das Abfragen der pg_classTabelle, um den richtigen pg_toast_XXXXXXWert zu finden , aber es schien, dass dies daran lag, dass er nicht in den Fehlermeldungen angezeigt wurde. Ich habe diesen Teil übersprungen, weil in der Fehlermeldung ein Wert angezeigt wurde Ich denke, es könnte aufgrund einer späteren Version von PostgreSQL eine Annehmlichkeit sein.)
Ich habe folgendes ausgeführt:
REINDEX table pg_toast.pg_toast_987654321;
VACUUM ANALYZE my_table;
Ich kann jetzt pg_dumpfehlerfrei verwenden.
Was pg_toastund was haben diese Befehle tatsächlich getan? Handelt es sich lediglich um eine einfache Bereinigung, oder hätten sie einige Zeilen in dieser Tabelle entfernen können? Was könnte das Problem überhaupt verursacht haben?
Diese Tabelle enthält ungefähr 300000 Zeilen, aber ich würde erwarten, dass es seit der vorherigen erfolgreichen Sicherung nur ungefähr 250 neue Zeilen gibt (diese Tabelle wird nur für INSERT / SELECT verwendet, keine UPDATEs).