Не удалось открыть файл "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
Может быть несколько отсутствующих файлов, но если это всего несколько файлов, это альтернатива для рассмотрения.