Я использую 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).
источник
Ответы:
Учитывая, что вы сделали переиндексацию, вероятно, он использовал сканирование индекса, чтобы попытаться найти значения в таблице и не смог найти их. Это звучит как поврежденный индекс. Вакуумный анализ меняет таблицу, а переиндексация - нет, и изменения очень незначительны.
Можно подумать, что атрибуты TOASTed фактически разбиты на куски размером около 4 Кб, и они хранятся в строках. Они ищутся и сортируются / переподключаются с основной строкой во время запроса. Похоже, использованный здесь индекс был поврежден, и поэтому переиндексация решила проблему.
Я обнаружил, что поврежденные индексы обычно являются признаком того, что с сервером что-то не так. Это хорошо, чтобы проверить и убедиться, что память, процессор и жесткие диски все в порядке и не сообщают о проблемах. Я обнаружил, что перегреваемые серверы особенно подвержены повреждению индексов, и если индексы могут быть повреждены, нужно также беспокоиться о повреждении данных.
источник