Używam PostgreSQL 8.4.15. Podczas uruchamiania pg_dump
tworzenia kopii zapasowej bazy danych wystąpił następujący błąd:
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 ...)
Podczas wyszukiwania tego komunikatu o błędzie znalazłem kilka odniesień ( tu i tutaj ), które sugerowały ponowne indeksowanie tabeli. (W tych dyskusjach było odniesienie do zapytania pg_class
tabeli w celu znalezienia właściwej pg_toast_XXXXXX
wartości, ale wydawało się, że było tak, ponieważ nie było to wyświetlane w ich komunikatach o błędach. Pominąłem tę część, ponieważ miałem wartość wyświetlaną w komunikacie o błędzie Myślę, że może to być wygoda ze względu na późniejszą wersję PostgreSQL.)
Uruchomiłem następujące:
REINDEX table pg_toast.pg_toast_987654321;
VACUUM ANALYZE my_table;
Teraz mogę używać pg_dump
bez błędów.
Co pg_toast
i co faktycznie zrobiły te polecenia? Czy są to tylko proste porządki, czy może pozbyli się niektórych wierszy w tej tabeli? Co mogło być przyczyną problemu?
W tej tabeli znajduje się około 300 000 wierszy, ale spodziewam się, że będzie tylko około 250 nowych wierszy od poprzedniej udanej kopii zapasowej (ta tabela jest używana tylko dla INSERT / SELECT, bez aktualizacji).