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

pg_dump: Сообщение об ошибке от сервера: ОШИБКА: отсутствует блок номер 0 для значения toast 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

У меня нет более ранних резервных копий. Как это исправить?

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

решение1

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

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

решение2

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

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

Связанный контент