VACUUM を怠っていると突如 PostgreSQL が何も受け付けなくなる

今更 PostgreSQL にびっくりさせられたのでメモ。

このようなエラーが出て何もできなくなる。

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

定期的な VACUUM を怠るとなるらしい。こういう時は慌てず騒がず PostgreSQL を停止し、シングルユーザーモードで各データベースに VACUUM を実行する。

1. 停止。

$ pg_ctl stop

2. シングルユーザーモードで起動。dbname は任意のデータベース名ね。

$ postgres dbname

3. バキューム。

backend> VACUUM

4. シングルユーザーモードからの脱出は Ctrl + D。...ってのを、エラーが出なくなるまで繰り返す。

5. 開始。

pg_ctl start

以上。今更だなぁ。