Не удалось открыть файл "pg_clog/0000": такого файла или каталога нет

Я получаю сообщение об ошибке, подобное следующему при доступе к базе данных Postgres

ERROR:  could not access status of transaction 69675
DETAIL:  Could not open file "pg_clog/0000": No such file or directory.

Я ничего не делал с pg_clog папка но 0000 файла там нет. Есть ли способ восстановить этот файл или каким-либо образом исправить эту проблему? Любая помощь будет оценена.

2 ответа

Вы испытываете повреждение базы данных, и вы должны восстановить из резервной копии. Вы должны попытаться выяснить, что случилось с базой данных, чтобы вы могли предотвратить это в будущем.

  • Надежно ли ваше хранилище?
  • Вы используете опасные настройки, такие как fsync = off?
  • Были ли сбои в последнее время?
  • Вы действительно используете 9.1? Если да, вы не должны этого делать, так как это вне поддержки.
  • Есть ли файлы в pg_clog каталог? Там должен быть.
  • Была ли у вас недавно проблема с нехваткой места, из-за которой кто-то мог удалить файлы из каталога "log"?

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

      dd if=/dev/zero of=/path/to/db/pg_clog/xxxx bs=256k count=1
chown postgres.postgres /path/to/db/pg_clog/xxxx
chmod go-rwX /path/to/db/pg_clog/xxxx

Может быть несколько отсутствующих файлов, но если это всего несколько файлов, это альтернатива для рассмотрения.

Другие вопросы по тегам