PostgreSQL — invalid page in block 2196 of relation base/349583/364737

Буквально вчера один наш клиент пожаловался, что у него делаются бэкапы в базе 1С живущая на PostgreSQL. В связи с тем что мы предоставляем им только VPS и не более того, мы не ведали что у них там творится внутри собственно. А как оказалось уже достаточно давно бэкапы не пишутся ибо у них своего админа тоже нет и никто за этим не следит.

Отправили нам обращение, посмотрели что у них там происходит и видим следующее при попытке снять резервную копию:

ERROR: invalid page in block 2196 of relation base/349583/364737

Потратив целых 15 минут выяснилось что так просто взять и нажать кнопочку «Хорошо» уже не получится и какого то штатного решения нет от слова «Совсем». Готовых скриптов тоже нет. В итоге решив что надо бы опубликовать найденное решение для тех кто использует PostgreSQL на Windows.

  1. Запускаем pgAdmin.
  2. Запускаем Query Tool и:
    1. Путь к базе думаю ни у кого не будет вызывать сомнения с какой базой возникла проблема, по этому опустим метод поиска имени базы зная только base/349583
    2. Далее что бы надо вставить текст:
      SELECT pg_filenode_relation(0, 364737); — в результате получаем имя таблицы. У нас это была таблица «_document143_vt2652»
    3. Теперь нам надо запустить её восстановление:
      SET zero_damaged_pages = on;
      VACUUM FULL _document144;
  3. По окончании выполнения надо выполнить переиндексацию всей базы!

Надо учесть, что часть данных может быть утеряно из таблицы!

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Оставьте комментарий

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: