前提条件
- ソース 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 が実行されているマシンから到達できることを確認してください。接続を許可するには、ファイアウォールルールまたはセキュリティグループの設定が必要になる場合があります。
ピアを作成する
+ New peer ボタンをクリックします。
ソースピアの作成
Create peer ボタンをクリックしてピアを保存します。
ターゲットピアの作成
Create peer ボタンをクリックしてターゲットピアを保存します。
これで、“Peers” セクションにソースピアとターゲットピアの両方が表示されるはずです。
ソーススキーマのダンプを取得する
pg_dump を使うと、ソース PostgreSQL データベースのスキーマのみのダンプを作成できます。
pg_dump のインストール
pg_dump のインストール
Ubuntu:パッケージリストを更新します:PostgreSQL クライアントをインストールします:macOS:方法 1: Homebrew を使用する (推奨)Homebrew がインストールされていない場合は、次のコマンドでインストールします:PostgreSQL をインストールします:インストールを確認します:
スキーマダンプから一意制約と索引を削除する
スキーマダンプをターゲットデータベースに適用する
psql で接続し、スキーマダンプファイルを実行して、ターゲットの ClickHouse Managed Postgres データベースに適用できます。
session_replication_role を replica に設定できます。
ミラーを作成する
+ New mirror ボタンをクリックします。
- 移行内容が分かる名前をミラーに付けます。
- ドロップダウンメニューから、先ほど作成したソースピアとターゲットピアを選択します。
- 次のことを確認します。
- Soft delete が OFF になっていること。
Advanced settingsを展開し、Postgres type system が有効で、PeerDB columns が無効になっていることを確認します。
- 移行するテーブルを選択します。特定のテーブルを選ぶことも、ソースデータベース内のすべてのテーブルを選ぶこともできます。
テーブルの選択前の手順でスキーマをそのまま移行しているため、ターゲットデータベース内の宛先テーブル名がソーステーブル名と同じであることを確認してください。
- ミラーの設定が完了したら、
Create mirrorボタンをクリックします。
初期ロードを待つ
初期ロードとレプリケーションの監視
- まず、各テーブルの行数を見積もるために COUNT クエリを実行します。
- 次に、NTILE を使用したパーティション化クエリを実行し、大きなテーブルを効率的に転送できるよう、より小さな chunk に分割します。
- その後、FETCH コマンドを実行してソースデータベースからデータを取得し、PeerDB がそれらをターゲットデータベースに同期します。
移行後の作業
これらの手順は、具体的なユースケースやアプリケーション要件によって異なる場合があります。重要なのは、新しいシステムへ完全に切り替える前に、データの整合性を確保し、ダウンタイムを最小限に抑え、移行したデータに問題がないことを検証することです。
- カットオーバー前の検証を実行する
- ソースシステムでの書き込みを停止する
- レプリケーションが完全に追いついていることを確認する
- 制約、索引、トリガーを再作成して有効にする
replica に設定していた場合は、それもリセットしてください。
- ターゲットテーブルのシーケンスをリセットする
- アプリケーショントラフィックを切り替える
- 読み取りトラフィックの送信先を ClickHouse Managed Postgres に切り替えます。
- 書き込みトラフィックの送信先を ClickHouse Managed Postgres に切り替えます。
- アプリケーションエラー、制約違反、データベースの健全性を監視します。
- リソースをクリーンアップする
レプリケーションスロット継続的レプリケーションを有効にしている場合、PeerDB は移行元の PostgreSQL データベースに レプリケーションスロット を作成します。不要なリソース消費を避けるため、移行が完了したら、移行元データベースからレプリケーションスロットを手動で削除してください。
参考資料
- ClickHouse Managed Postgres ドキュメント
- CDC 作成に関する PeerDB ガイド
- Postgres ClickPipe よくある質問 (PeerDB にも同様に当てはまります)