PeerDB を使用して Managed Postgres に移行する
このガイドでは、PeerDB を使用して PostgreSQL データベースを ClickHouse Managed Postgres に移行するための手順をステップバイステップで説明します。
Private preview in ClickHouse Cloud前提条件
- 移行元となる PostgreSQL データベースへのアクセス権限。
- データを移行先とする ClickHouse Managed Postgres インスタンス。
- PeerDB がインストールされているマシン。インストール手順については PeerDB GitHub リポジトリ を参照してください。リポジトリをクローンして
docker-compose upを実行するだけです。このガイドでは PeerDB UI を使用します。PeerDB が起動すると、http://localhost:3000でアクセス可能になります。
移行前の考慮事項
移行を開始する前に、以下の点を確認してください。
- データベースオブジェクト: PeerDB はソーススキーマに基づき、ターゲットデータベースにテーブルを自動作成します。ただし、索引、制約、トリガーなど一部のデータベースオブジェクトは自動的には移行されません。移行後に、これらのオブジェクトをターゲットデータベース上で手動で再作成する必要があります。
- DDL の変更: 継続的レプリケーションを有効にした場合、PeerDB は DML 操作(INSERT、UPDATE、DELETE)についてソースとターゲットのデータベースを同期し、ADD COLUMN 操作を伝播します。ただし、その他の DDL 変更(DROP COLUMN、ALTER COLUMN など)は自動的には伝播されません。スキーマ変更のサポートについての詳細はこちらを参照してください。
- ネットワーク接続性: PeerDB を実行しているマシンから、ソースおよびターゲットの両方のデータベースへアクセス可能であることを確認してください。接続を許可するために、ファイアウォールルールやセキュリティグループの設定を変更する必要がある場合があります。
ピアを作成する
まず、ソースデータベースとターゲットデータベースそれぞれについてピアを作成する必要があります。ピアはデータベースへの接続を表します。PeerDB の UI で、サイドバーの「Peers」をクリックして「Peers」セクションを開きます。新しいピアを作成するには、+ New peer ボタンをクリックします。
ソース側ピアの作成
ホスト、ポート、データベース名、ユーザー名、パスワードなどの接続情報を入力して、ソース PostgreSQL データベース用のピアを作成します。すべて入力したら、Create peer ボタンをクリックしてピアを保存します。

ターゲットピアの作成
同様に、必要な接続情報を入力して、ClickHouse Managed Postgres インスタンス用のピアを作成します。インスタンスの接続情報は、ClickHouse Cloud コンソールから取得できます。情報を入力したら、Create peer ボタンをクリックしてターゲットピアを作成します。

これで、「Peers」セクションにソースピアとターゲットピアの両方が表示されているはずです。

ソーススキーマダンプの取得
ターゲットデータベースでソースデータベースと同一のスキーマ構成を再現するために、ソースデータベースのスキーマダンプを取得する必要があります。ソースの PostgreSQL データベースについてスキーマのみのダンプを作成するには、pg_dump を使用できます。
これをターゲットデータベースに適用する前に、ダンプファイルから UNIQUE 制約と索引を事前に削除しておく必要があります。そうしないと、これらの制約によって PeerDB によるターゲットテーブルへのインジェストがブロックされてしまいます。これらは次のコマンドで削除できます。
スキーマダンプをターゲットデータベースに適用する
スキーマダンプファイルをクリーンアップしたら、psql で接続し、スキーマダンプファイルを実行してターゲットの ClickHouse Managed Postgres データベースに適用します。
ここではターゲット側で、外部キー制約によって PeerDB へのインジェストがブロックされないようにします。そのために、上記のターゲットピアで使用したターゲットロールを変更し、session_replication_role を replica に設定します:
ミラーを作成する
次に、ソースとターゲットのピア間でのデータ移行プロセスを定義するミラーを作成します。PeerDB の UI でサイドバーの「Mirrors」をクリックして、「Mirrors」セクションに移動します。新しいミラーを作成するには、+ New mirror ボタンをクリックします。

- 移行内容がわかる名前をミラーに付けます。
- ドロップダウンメニューから、先ほど作成したソースとターゲットのピアを選択します。
- 次の点を確認します:
- Soft delete が OFF になっていること。
Advanced settingsを展開します。Postgres type system is enabled が有効になっており、PeerDB columns are disabled が無効になっていることを確認します。

- 移行したいテーブルを選択します。特定のテーブルだけを選択することも、ソースデータベース内のすべてのテーブルを選択することもできます。

前のステップでスキーマをそのまま移行しているため、ターゲットデータベース内で、宛先テーブル名がソーステーブル名と同一であることを確認してください。
- ミラー設定の構成が完了したら、
Create mirrorボタンをクリックします。
「Mirrors」セクションに、作成したばかりのミラーが表示されるはずです。

初回ロードの完了を待つ
ミラーを作成すると、PeerDB はソースからターゲットデータベースへの初回データロードを開始します。ミラーをクリックし、Initial load タブを開くと、初回データ移行の進行状況を確認できます。

初回ロードが完了すると、移行が完了したことを示すステータスが表示されます。
初期ロードとレプリケーションの監視
ソースの peer をクリックすると、PeerDB が実行中のコマンド一覧を確認できます。例えば、次のようなものがあります。
- まず、各テーブル内の行数を見積もるために COUNT クエリを実行します。
- 次に、NTILE を使用したパーティション分割クエリを実行し、大きなテーブルをより小さな chunk に分割して、データ転送を効率化します。
- その後、FETCH コマンドを実行してソースデータベースからデータを取得し、PeerDB がそれらをターゲットデータベースに同期します。
移行後のタスク
移行が完了したら、次の作業を実施してください。
- データベースオブジェクトの再作成: ターゲットデータベースでは、インデックス、制約、トリガーは自動では移行されないため、手動で再作成する必要があることに注意してください。
- アプリケーションのテスト: すべてが想定どおり動作していることを確認するため、ClickHouse Managed Postgres インスタンスに対してアプリケーションをテストしてください。
- リソースのクリーンアップ: 移行結果に満足し、アプリケーションの接続先を ClickHouse Managed Postgres に切り替えたら、リソースをクリーンアップするために PeerDB 上のミラーとピアを削除できます。
継続的なレプリケーションを有効にした場合、PeerDB はソースの PostgreSQL データベース上にレプリケーションスロットを作成します。不要なリソース消費を避けるため、移行が完了した後はこのレプリケーションスロットをソースデータベースから手動で削除してください。
参考資料
次のステップ
おめでとうございます!pg_dump と pg_restore を使用して、PostgreSQL データベースを ClickHouse Managed Postgres に正常に移行できました。これで Managed Postgres の各種機能や ClickHouse との連携を試す準備が整いました。スムーズに始められるよう、10 分で完了するクイックスタートを用意しています: