У меня есть база данных Postgres, в которой произошел сбой (как и на диске), и произошли некоторые ошибки данных (согласно После сбоя диска БД теперь «ошибка поиска индекса в кэше»).
Исходная проблема, похоже, связана с системными таблицами, как подсказывает ответ на этот вопрос. Однако даже попытаться переиндексировать базу данных не удалось.
Пытаюсь postgres -P -D datadir dbname
дает ту же ошибку, FATAL: cache lookup failed for index 2662
- разве это не то, что должен обойти флаг -P?
Как вы подключаетесь к базе данных, чтобы переиндексировать базу данных, если вы не можете игнорировать системные таблицы? Или что-то еще происходит?
В этом случае, когда флаг -P все еще приводит к ошибкам, база данных почти наверняка не подлежит (разумному) восстановлению.
Это:
postgres -O -P -D /data/dir -c log_error_verbosity=verbose dbname
дает дополнительную информацию. В данном случае это означало повреждение за пределами таблицы pg_class.
Подробнее о список pgsql-admin.