После
$ 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 и выполнить это как двоичный поиск по строкам в таблице (начать с середины, разрезая каждую часть пополам и т. Д.). Как только вы определили строку, удалите ее, и вы сможете сбросить оставшуюся часть базы данных. Если у вас есть строка, вы также можете определить, какой это отдельный столбец, конечно, если данные имеют большое значение.