
После
$ 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