DBAtlas · データベース運用アトラス

pgBackRestで特定時点にリストア(PITR、--type=time)

PostgreSQLバックアップとPITR

コマンド

sudo systemctl stop postgresql-16
sudo -u postgres pgbackrest --stanza=<stanza> --delta --type=time "--target=2026-10-08 14:30:00+03" --target-action=pause restore
sudo systemctl start postgresql-16
# Recovery stops at the target (read-only); validate the data:
psql -X -c "SELECT pg_is_in_recovery(), pg_last_xact_replay_timestamp();"
# If correct, end recovery and open read-write on a new timeline:
psql -X -c "SELECT pg_wal_replay_resume();"

概要

ターゲット時刻より前に完了したバックアップをリストアし、ターゲットまでのWALのみを再生する。target-action=pauseはターゲットで停止してデータを検証できるようにし、pg_wal_replay_resume()で昇格する。

使用する場面

誤ったDELETE/DROP/UPDATEなどの論理エラーの直前の時点に戻すため。

注意

このクラスタではターゲット以降のすべての変更が失われる。可能であれば別のサーバーでPITRを実行し、影響を受けたデータのみをpg_dumpで戻す。ターゲットにはタイムゾーンを明示する。pgBackRest 2.24以降はターゲット以前の適切なバックアップを自動的に選択する。古いリリースでは--setでターゲットより前に完了したバックアップを指定する。ターゲットがバックアップの終了時刻より前の場合、リストアは一貫性に到達できない。

DBAtlas で開く →

関連項目