postgresqlのWALログ(pg_xlog) が壊れたとき

postgresql 9.0 のストリーミングレプリケーションを試そうとして、うっかりpg_xlog をごっそり削除したらpostgresqlが起動しなくなった^^;

LOG:  invalid secondary checkpoint record
PANIC:  could not locate a valid checkpoint record
LOG:  startup process (PID 30232) was terminated by signal 6: Aborted
LOG:  aborting startup due to startup process failure

pg_resetxlogでWALを初期化する。

$ pg_resetxlog /path/to/datadir

これで起動するけど、documentいわく安心してはいけないらしい。

このコマンドを実行すると、サーバが開始できるようになるはずです。ただし、不完全にコミットされたトランザクションが原因でデータベースのデータに矛盾が起こる可能性があることに注意してください。コマンドの実行後は、データをただちにダンプし、initdbを実行し、リロードすべきです。 リロード後、矛盾がないか検査し、必要に応じて修復を行ってください。