Назад | Перейти на главную страницу

pg_dump: сообщение об ошибке от сервера: ОШИБКА: отсутствует номер блока 0 для значения тоста 43712886 в pg_toast_16418

После

$ pg_dumpall -U postgres -f /tmp/pgall.sql 

Я вижу следующее:

pg_dump: SQL command failed
pg_dump: Error message from server: ERROR:  missing chunk number 0 for toast value 43712886 in pg_toast_16418
pg_dump: The command was: COPY public.page_parts (id, name, filter_id, content, page_id) TO stdout;
pg_dumpall: pg_dump failed on database "radiant", exiting

Бэкапов ранее не было. Как я могу это исправить?

Заранее спасибо.

Спасибо. Создайте простой скрипт.

514 - выберите количество (*) из page_parts

for ((i=0; i<514; i++ )); do psql -U postgres radiant -c "SELECT * FROM page_parts LIMIT 1 offset $i" >/dev/null || echo $i; done

ERROR: missing chunk number 0 for toast value 43712886 in pg_toast_16418
433

Это означает, что ваша база данных по какой-то причине в основном повреждена.

Что вам нужно сделать, так это попытаться получить доступ к таблице page_parts по частям (по одной строке за раз), чтобы определить, какая строка повреждена, а затем удалить строку. Вероятно, самый простой способ сделать это - выполнить SELECT * FROM page_parts LIMIT и выполнить это как двоичный поиск по строкам в таблице (начать с середины, разрезая каждую часть пополам и т. Д.). Как только вы определили строку, удалите ее, и вы сможете сбросить оставшуюся часть базы данных. Если у вас есть строка, вы также можете определить, какой это отдельный столбец, конечно, если данные имеют большое значение.