null

Очистка логов транзакций postgresql

Столкнулся как с проблемой что не стартует postgresql ругаясь на отсутствуе одного из файлов в директории pg_xlog. Как выяснилось, человек отвечающий за сервер отреагировал на сообщения nagios о заканчивающемся свободном месте и выяснив кто его "поедает", удалил несколько файлов из каталога pg_xlog. Оживить сервер postgresql получилось следующими шагами:

1) Останавливаем postgresql

/etc/init.d/postgresql-8.4 stop

2) Выполняем команду pg_controldata указывая путь до базы postgresql

/usr/lib/postgresql-8.4/bin/pg_controldata /opt/backup/postgresql/8.4/data/

нас интересуют строчки:

Latest checkpoint's NextXID: 0/1186399159

Latest checkpoint's NextOID: 4716704

3) Выполняем команду pg_resetxlog коророй указываем NextOID и NextXID (команда выполняется из под пользователя postgres)

/usr/lib/postgresql-8.4/bin/pg_resetxlog -o 4716704 -x 1186399159 -f /opt/backup/postgresql/8.4/data/

4) Запускаем postgresql

/etc/init.d/postgresql-8.4 start

После выполнения этих шагов очистился каталог pg_xlog освободив около 90ГБ