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

После сбоя диска БД теперь «ошибка поиска индекса в кэше»

После решения некоторых проблем с сетевым диском, на котором была размещена наша база данных Postgres, мы столкнулись с этой ошибкой:

OperationalError: FATAL: cache lookup failed for index 2662

Эта конкретная ошибка была вызвана командной строкой Python, но другие попытки подключения к БД привели к тому же результату: либо обычный запрос, либо попытка дампа базы данных.

Как вы собираетесь исправить эту ошибку и восстановить данные?

Похоже, у вас повреждены данные. Когда вы говорите «сетевой диск», это сразу становится красным флажком. Настроить NFS для обеспечения надежности данных с PostgreSQL очень сложно. AFAIK невозможно настроить SMB, чтобы получить его. Так что, скорее всего, вы получили повреждение данных в результате сбоя, потому что подключение к сети было небезопасным.

2662 - это индекс oid в pg_class, который в основном представляет собой индекс таблицы, в котором перечислены таблицы и индексы, существующие в вашей базе данных. Когда это повреждено, у вас серьезные проблемы.

Лучше всего на этом этапе попытаться запустить автономный сервер (конечно, с отключенным основным) с параметром «-P», который отключает использование системных индексов. Затем попробуйте REINDEX pg_class и, возможно, остальные системные индексы. Если это сработало, сразу сделайте резервную копию pg_dump и повторно инициализируйте базу данных. Вероятно, в системе больше коррупции.

Если это не сработает, попробуйте отправить сообщение в список рассылки pgsql-general, вы, вероятно, получите там больше и быстрее ответов. Но, скорее всего, дело в ваших резервных копиях - или наймите специалиста по восстановлению данных, если ваши данные действительно важны и у вас нет рабочих резервных копий.