PostgreSQLオンラインバックアップ

pg_standbyをはじめて設定したときはメインDBストップしてデータ領域コピーしたのだけど
メインDBを稼働させたままバックアップとることができるみたい。

設定

まず、postgres.confでarchive_modeをonにしておく。でないとpg_start/stop_backupが使えない

archive_mode = on

バックアップ

# オンラインバックアップの準備(ラベルに現在時刻設定してる)
psql -c "SELECT pg_start_backup(now()::text)"

# 適当にバックアップ側にコピー
scp -r /usr/local/pgsql/data root@hogehoge:/usr/local/pgsql

# オンラインバックアップの終了
psql -c "SELECT pg_stop_backup()"

# 転送したバックアップ側のpidとpg_xlogは削除する
rm /usr/local/pgsql/data/postmaster.pid
rm /usr/local/pgsql/data/pg_xlog/*
rm /usr/local/pgsql/data/pg_xlog/archive_status/*

参考サイトだと転送をrsyncでやっていてpidとpg_xlogは転送対象から除外している。
こっちのがスマート。