Хорошо, ребята, я переехал в новую компанию и вижу, что у них здесь одна база данных PostgreSQL для запуска OpenNMS.
Я человек MySQL, совсем не знаком с PostgreSQL, но я по крайней мере научился запускать psql
и postgres -D
попасть в однопользовательский режим.
Как бы то ни было, OpenNMS разбился. Я вошел и отследил это до PostgreSQL, выдав эту ошибку:
WARNING: database "template1" must be vacuumed within 965550 transactions
HINT: To avoid a database shutdown, execute a full-database VACUUM in "template1".
На самом деле он начинался с 1 миллиона, а я опустился до 965500, как видите. Я дошел до этого момента, войдя в систему для одного пользователя (postgres -D
) и работает Vacuum full. Теперь я ожидал, что это очистит его, но в результате получилось ровно 55 строк:
WARNING: database "template1" must be vacuumed within 938861 transactions
HINT: To avid a database shutdown, execute a full-database VACUUM in "template1".
WARNING: database "template1" must be vacuumed within 938860 transactions
HINT: To avoid a database shutdown, execute a full-database VACUUM in "template1".
WARNING: database "template1" must be vacuumed within 938861 transactions
HINT: To avoid a database shutdown, execute a full-database VACUUM in "template1".
WARNING: database "template1" must be vacuumed within 938860 transactions
HINT: To avoid a database shutdown, execute a full-database VACUUM in "template1".
Итак, у меня есть вопрос: нужно ли мне просто продолжать работать, пока я не достигну 0, или я делаю это неправильно?
Я сталкивался с этой проблемой раньше. Ниже приведены мои заметки о том, как я это исправил.
Вам нужно решить проблему, запустив вакуум, на что удобно намекает ошибка. Для этого сначала выключите postgres. sudo /sbin/service postgresql stop
Теперь вам нужно просмотреть каждую базу данных и выполнить вакцинацию с помощью автономной серверной части. От имени пользователя postgres Выполните: postgres -D /opt/pgsql/data/ postgres
Где / opt / pgsql / data - это путь к каталогу данных postgres, а postgres - это имя базы данных, которую вы хотите исправить.
Вы получите сообщение вроде:
Автономный сервер PostgreSQL 8.1.18
бэкэнд>
Просто введите VACUUM
в подсказке backend>.
Теперь вы, скорее всего, получите что-то вроде ПРЕДУПРЕЖДЕНИЕ: база данных «template1» должна быть очищена в течение 999407 транзакций. СОВЕТ: Чтобы избежать завершения работы базы данных, выполните полную VACUUM базы данных в «template1».
Просто продолжайте повторять шаги, каждый раз меняя DBNAME, пока вы не перестанете получать предупреждения. Когда это произойдет, вы можете перезапустить postgres, и все снова будет в порядке.
Изменить: я также должен упомянуть, что после того, как мы сделали этот процесс несколько раз; мы решили реализовать процесс автовакуумирования: http://www.postgresql.org/docs/8.1/static/main maintenance.html#AUTOVACUUM