Cloud SQL for PostgreSQL のポイントインタイムリカバリ(PITR)をコンソールと gcloud コマンドを利用してやってみた

Cloud SQL for PostgreSQL のポイントインタイムリカバリ(PITR)をコンソールと gcloud コマンドを利用してやってみた

2025.08.24

アノテーション、Google Cloud が大好きな村上です。

運用中のテーブルを誤って更新してしまい、「しまった、直前の状態に戻したい…」と思ったことはありませんか?
Cloud SQL for PostgreSQL には、そんな時に役立つ「ポイントインタイムリカバリ(以下、PITR)」という機能があります。
しかし、いざ使おうとすると「どの画面から?」 「時刻はUTC指定?」 「元のインスタンスに上書きできる?」といった点で迷いがちなのも事実です。

本記事では、あらかじめ 3 つのレコードを入れた後で「復元用の日時」を取得し、その後さらに 3 つのレコードを追加します。そこから PITR で「最初の 3 つのレコードのみがある状態」まで戻す様子を、Google Cloud コンソール・gcloud コマンドの 2 パターンでご紹介します。

前提と環境準備

PITR 実行の前提条件と準備です。

  • 必要ロール
  • 前提機能
    • 自動バックアップが有効であること
    • ポイントインタイムリカバリが有効であること
  • 接続環境
    • Cloud Shell(gcloud と psql が揃い、ネットワークも簡易)

Step1 インスタンス作成(コンソールで PITR を有効化)

まず、コンソールからインスタンスを作成して、PITR を有効化します。

インスタンスの作成手順

  1. コンソール > SQL > インスタンスを作成 > PostgreSQL を選択
  2. リージョン/マシンタイプ/ストレージを最小構成に(検証なので低コストでOK)
  3. 「データの保護」の項目において「自動日次バックアップ」にチェック
  4. 「ポイントインタイム リカバリを有効にする」にチェック
    2025-08-24_08h02_27
  5. 「インスタンスの作成」ボタンをクリック

Step2 検証データの用意と復元時刻の取得

Cloud Shell から接続し、データを投入します。

  1. デフォルトユーザー postgres で接続します
gcloud sql connect test-pitr --user=postgres

gcloud sql connect  |  Google Cloud SDK Documentation

  1. データベースとテーブルを作成した後に、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)
  1. 復元時に指定する日時(UTC)をタイムスタンプで取得します
SELECT clock_timestamp();
        clock_timestamp        
-------------------------------
 2025-08-23 23:39:23.406334+00
(1 row)

2025-08-23 23:39:23
この値を控えておきます。

  1. タイムスタンプを取得した後にさらに 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 で、タイムスタンプを取得した時点のデータへ復元します。

  1. すべてのインスタンス > test-pitr へと移動して画面上部の「クローンを作成」をクリックします

2025-08-24_08h47_49

  1. Step3 で控えた UTC 時刻 2024-08-23 23:39:23 を、コンソールのタイムゾーン設定(デフォルトではJST)に合わせて日本時間に変換し、入力します

復元先インスタンス名は、test-pitr-from-console とします。

2025-08-24_08h52_55

  1. 「クローンの作成」ボタンをクリックします
    test-pitr-from-console インスタンスが作成されました。

2025-08-24_09h20_57

  1. 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 が確認できます。

2025-08-24_09h38_24

インスタンスの作成完了後、データベース 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 パターンで、タイムスタンプ取得時のデータ復元を実施しました。
いざという時に慌てないためにも、一度ステージング環境などで手順を試しておくことをお勧めします。

この記事がどなたかのお役に立てば幸いです。

参考

この記事をシェアする

facebookのロゴhatenaのロゴtwitterのロゴ

© Classmethod, Inc. All rights reserved.