気まぐれSE日記

地方でエンジニアしてます

PostgreSQLでの見慣れないエラー

某所で、PostgreSQLのデータベースが動いていないとの連絡。
ちなみにバージョンは、8.2.5


ログを確認したところ、あるデータベースに対してだけこんなのが大量に出ていた。


postgres[17035]: [5-1] WARNING: database "database" must be vacuumed within 11000000 transactions
postgres[17035]: [5-2] HINT: To avoid a database shutdown, execute a full-database VACUUM in "database".
postgres[17035]: [6-1] WARNING: database "database" must be vacuumed within 10999999 transactions
postgres[17035]: [6-2] HINT: To avoid a database shutdown, execute a full-database VACUUM in "database".
postgres[17035]: [7-1] WARNING: database "database" must be vacuumed within 10999998 transactions
postgres[17035]: [7-2] HINT: To avoid a database shutdown, execute a full-database VACUUM in "database".


psqlコマンドすら動かない。ヒントがあるので、その通りやれば治るということだな。


psql: FATAL: database is not accepting commands to avoid wraparound data loss in database "database"
HINT: Stop the postmaster and use a standalone backend to vacuum database "database".


参考:http://blog.mikuriya.biz/archives/282

上記のブログでは、

template1などにはVACUUMを行なっていなかったのが原因のようだ。

とあるけど、このサーバでは毎晩cronで「vacuum -az」で全データベースにvacuumをかけていました。ただし、-fオプションは付けておらず、「vacuum full」では無かったのでこれが今回の障害の原因かな。ログを見る限りでは「execute a full-database VACUUM」ってあるからね。しかし、PostgreSQL は 全てのデータベースを vacuum full してないと動作不能になるとは思いもしなかったよ。