pgBackRestのデルタリストアでスタンバイを迅速に再構築
PostgreSQLバックアップとPITRコマンド
sudo systemctl stop postgresql-16
# Keeps the existing PGDATA and fetches only differing files; writes standby.signal:
sudo -u postgres pgbackrest --stanza=<stanza> --delta --type=standby "--recovery-option=primary_conninfo=host=<primary_host> port=5432 user=replicator application_name=<standby_name>" restore
sudo systemctl start postgresql-16
psql -X -c "SELECT status, sender_host FROM pg_stat_wal_receiver;"概要
--deltaは既存のPGDATA内のファイルをバックアップと比較し(サイズ/タイムスタンプとチェックサム)、差異のあるファイルのみをコピーする。--type=standbyはstandby.signalを書き込み、recovery-optionはprimary_conninfoを追加する。スタンバイはまずアーカイブから追いつき、その後ストリーミングに切り替わる。
使用する場面
遅延したスタンバイ、タイムラインが分岐したスタンバイ、pg_rewindが失敗した旧プライマリを、フルコピーなしでレプリカに戻すため。
注意
デルタはターゲットディレクトリ内の差異のあるファイルや余分なファイルをバックアップのもので置換/削除する。誤ったサーバーで実行するとそのサーバーのデータが破壊される。pgBackRestは稼働中のPostgreSQLへのリストアを拒否するが、サービスが停止していることを自分でも確認する。パスワードはprimary_conninfoではなく.pgpassに保存する。