Я использую PostgreSQL 8.4.15. При запуске pg_dump
для резервного копирования базы данных я получил следующую ошибку:
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 ...)
При поиске этого сообщения об ошибке я нашел несколько ссылок ( здесь и здесь ), в которых предлагалось переиндексировать таблицу. (В этих обсуждениях была ссылка на запрос pg_class
таблицы для поиска правильного pg_toast_XXXXXX
значения, но казалось, что это потому, что оно не отображалось в их сообщениях об ошибках. Я пропустил эту часть, потому что в сообщении об ошибке отображалось значение Я думаю, это может быть удобно из-за более поздней версии PostgreSQL.)
Я запустил следующее:
REINDEX table pg_toast.pg_toast_987654321;
VACUUM ANALYZE my_table;
Теперь я могу использовать pg_dump
без ошибок.
Что pg_toast
и что на самом деле делали эти команды? Это просто простая очистка или они могли избавиться от некоторых строк в этой таблице? Что могло вызвать проблемы в первую очередь?
В этой таблице около 300000 строк, но я ожидаю, что с момента предыдущего успешного резервного копирования будет только около 250 новых строк (эта таблица используется только для INSERT / SELECT, без UPDATE).