Я використовую 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, без оновлення).