Cloud SQL for PostgreSQL のポイントインタイムリカバリ(PITR)をコンソールと gcloud コマンドを利用してやってみた
アノテーション、Google Cloud が大好きな村上です。
運用中のテーブルを誤って更新してしまい、「しまった、直前の状態に戻したい…」と思ったことはありませんか?
Cloud SQL for PostgreSQL には、そんな時に役立つ「ポイントインタイムリカバリ(以下、PITR)」という機能があります。
しかし、いざ使おうとすると「どの画面から?」 「時刻はUTC指定?」 「元のインスタンスに上書きできる?」といった点で迷いがちなのも事実です。
本記事では、あらかじめ 3 つのレコードを入れた後で「復元用の日時」を取得し、その後さらに 3 つのレコードを追加します。そこから PITR で「最初の 3 つのレコードのみがある状態」まで戻す様子を、Google Cloud コンソール・gcloud コマンドの 2 パターンでご紹介します。
前提と環境準備
PITR 実行の前提条件と準備です。
- 必要ロール
- インスタンスのクローン作成: roles/cloudsql.admin
- 接続・検証: roles/cloudsql.client(接続)
- 前提機能
- 自動バックアップが有効であること
- ポイントインタイムリカバリが有効であること
- 接続環境
- Cloud Shell(gcloud と psql が揃い、ネットワークも簡易)
Step1 インスタンス作成(コンソールで PITR を有効化)
まず、コンソールからインスタンスを作成して、PITR を有効化します。
インスタンスの作成手順
- コンソール > SQL > インスタンスを作成 > PostgreSQL を選択
- リージョン/マシンタイプ/ストレージを最小構成に(検証なので低コストでOK)
- 「データの保護」の項目において「自動日次バックアップ」にチェック
- 「ポイントインタイム リカバリを有効にする」にチェック
- 「インスタンスの作成」ボタンをクリック
Step2 検証データの用意と復元時刻の取得
Cloud Shell から接続し、データを投入します。
- デフォルトユーザー postgres で接続します
gcloud sql connect test-pitr --user=postgres
gcloud sql connect | Google Cloud SDK Documentation
- データベースとテーブルを作成した後に、3 つのレコードを入力します
CREATE DATABASE test;
\c test
CREATE TABLE items (
id SERIAL PRIMARY KEY,
note TEXT NOT NULL
);
INSERT INTO items (note) VALUES ('a'), ('b'), ('c');
SELECT * from items;
id | note
----+------
1 | a
2 | b
3 | c
(3 rows)
- 復元時に指定する日時(UTC)をタイムスタンプで取得します
SELECT clock_timestamp();
clock_timestamp
-------------------------------
2025-08-23 23:39:23.406334+00
(1 row)
2025-08-23 23:39:23
この値を控えておきます。
- タイムスタンプを取得した後にさらに 3 つのレコードを追加します
INSERT INTO items (note) VALUES ('x'), ('y'), ('z');
SELECT * FROM items;
id | note
----+------
1 | a
2 | b
3 | c
4 | x
5 | y
6 | z
(6 rows)
この状態で、タイムスタンプを取得した時点へ復元すれば、3 つのレコードだけを持つ状態に戻せます。
Step3-1 PITR を実施する(コンソール編)
PITR で、タイムスタンプを取得した時点のデータへ復元します。
- すべてのインスタンス > test-pitr へと移動して画面上部の「クローンを作成」をクリックします
- Step3 で控えた UTC 時刻 2024-08-23 23:39:23 を、コンソールのタイムゾーン設定(デフォルトではJST)に合わせて日本時間に変換し、入力します
復元先インスタンス名は、test-pitr-from-console とします。
- 「クローンの作成」ボタンをクリックします
test-pitr-from-console インスタンスが作成されました。
- test-pitr-from-console へ接続し、テーブル items のレコードを確認します
gcloud sql connect test-pitr-from-console --user=postgres
\c test
SELECT * FROM items;
id | note
----+------
1 | a
2 | b
3 | c
(3 rows)
タイムスタンプ取得時のデータでインスタンスを復元できました。
Step3-2 PITR を実施する(gcloud 編)
gcloud sql instances clone コマンドのオプションでポイントインタイムを指定します。
Step3 で取得した日時 2025-08-23 23:39:23(UTC)を指定して、PITR を実行します。
gcloud sql instances clone test-pitr test-pitr-from-cli \
--point-in-time="2025-08-23 23:39:23"
コンソール上においても、PITR により作成されたインスタンス test-pitr-from-cli が確認できます。
インスタンスの作成完了後、データベース test へ接続してテーブル itmes のレコードを確認します。
gcloud sql connect test-pitr-from-cli --user=postgres
\c test
SELECT * FROM items;
id | note
----+------
1 | a
2 | b
3 | c
(3 rows)
タイムスタンプ取得時のデータでインスタンスを復元できました。
まとめ
Cloud SQL for PostgreSQL の PITR は、誤操作からの復旧に有効です。データ復元の成功の鍵は「事前設定(自動バックアップと PITR の有効化)」 と 「正確な復元時刻」 の 2 つです。本記事では、コンソール、gcloud の 2 パターンで、タイムスタンプ取得時のデータ復元を実施しました。
いざという時に慌てないためにも、一度ステージング環境などで手順を試しておくことをお勧めします。
この記事がどなたかのお役に立てば幸いです。