前提条件
- レプリケーション権限を持つユーザーで、ソース PostgreSQL データベースにアクセスできること。ソースに応じて、以下のセットアップガイドに従ってください。
- 移行先として ClickHouse Managed Postgres サービスが必要です。まだ用意していない場合は、クイックスタート を参照してください。
- ローカルマシンに
pg_dumpとpsqlがインストールされていること。どちらも標準の PostgreSQL クライアントツールに含まれています。
移行前の注意事項
- DDL の伝播: 継続的レプリケーション (CDC) は、DML 操作と
ADD COLUMNを取り込みます。DROP COLUMNやALTER COLUMNなど、その他の DDL 変更は伝播されないため、ターゲット側で手動で適用する必要があります。
移行中に問題が発生した場合は、よくあるエラーとその解決策について Managed Postgres 移行のよくある質問 を確認してください。
Step 1: ソースデータベースに接続する
ClickHouse Cloud console を開き、Managed Postgres サービスを選択します。 左側のサイドバーで、データソース をクリックします。 Start import をクリックします。 ソース PostgreSQL データベースの接続情報 (ホスト、ポート、ユーザー名、パスワード、データベース名) を入力します。ソース側で必要な場合は、TLS を有効にします。 ソースデータベースへのプライベート接続が必要な場合は、SSH トンネリング を選択し、必要な SSH 情報を入力できます。これにより、公開されていないデータベースにも移行処理から安全に接続できます。 インジェスト方法を選択します。- 初期ロード + CDC — 既存データをコピーした後、継続的な変更を反映してターゲットを同期し続けます。
- 初期ロード only — 一回限りのコピーで、継続的なレプリケーションは行いません。
- CDC only — 初期コピーをスキップし、この時点以降の新しい変更だけをレプリケートします。
自動スキーマ移行
このオプションを選択すると、ClickPipe の作成後、Setup フェーズ中にソースデータベースのスキーマが自動的に取得され、Managed Postgres サービスに適用されます。 この機能では、後でウィザードで選択するテーブルにかかわらずソースデータベース内のすべてのデータベースオブジェクトを取得するため、空の宛先データベースが前提となります。宛先データベースに既存のデータがある場合や、より細かく設定したい場合は、代わりに手動モードを選択する必要があります。 ドロップダウンから宛先データベースを選択するか、新しいデータベースを作成をクリックして作成します。監視
ClickPipes の詳細ビューで、スキーマ移行の進行状況を確認できます。ログにはスキーマ移行のステータスが表示され、発生したエラーも表示されます。 このモードには、次の制限があります。- SSH トンネリングを使用するパイプでは、自動スキーマ移行を使用できません。スキーマは手動でエクスポートおよびインポートする必要があります。
手動スキーマ移行
移行先データベースにすでにデータが存在する場合や、自動モードで想定されるクリーンな状態ではなく、よりカスタマイズしたセットアップを行う場合は、ここで手動モードを選択できます。データベーススキーマをエクスポートする
ウィザードには、ソースへの接続情報があらかじめ入力されたpg_dump コマンドが表示されます。これをターミナルで実行します。
pg.sql が現在のディレクトリに作成されます。
Next をクリックします。
Managed Postgres サービスにスキーマをインポートする
ドロップダウンから宛先データベースを選択するか、新しいデータベースを作成 をクリックして新しく作成します。 ウィザードには、スキーマダンプを Managed Postgres サービスに適用するためのpsql コマンドが表示されます。これをターミナルで実行します。
Step 4: インジェスト設定を構成する
論理レプリケーションに使用するパブリケーションを指定します。空欄のままにすると、パブリケーションは自動的に作成されます。 スループットを調整するには、高度なレプリケーション設定を展開します。
Next をクリックします。
ステップ5: テーブルを選択
移行を監視する
移行を作成すると、データソースにステータスが 実行中 として表示されます。 移行をクリックすると、詳細ビューが開きます。テーブル タブには、処理済み行数、パーティション数、パーティションあたりの平均時間など、各テーブルの初期ロードの進行状況が表示されます。メトリクス タブには、CDC が開始されるとレプリケーションラグとスループットが表示されます。トラフィックの切り替え
初期ロードが完了し、CDC (変更データキャプチャ) を使用している場合はレプリケーションラグがほぼゼロになった時点で、ソースの Postgres データベースから Managed Postgres サービスへトラフィックを切り替えられます。移行の詳細ビューを開き、移行後の手順 タブを選択してください。このガイド付きウィザードでは、移行を安全に完了するために必要な 6 つのステップを順に案内します。次のステップへ進むには、その前のステップを完了しておく必要があります。ステップ1: ソース Postgres データベースを読み取り専用モードに設定する
カットオーバー中に差異が生じないよう、ソース側でアプリケーションからの書き込みを停止します。ウィザードには、ソースデータベース名があらかじめ入力されたALTER DATABASE コマンドが表示されるので、これをソースデータベース上で実行してください。
Postgres の provider によっては、この手順が異なる場合があります。managed service では
ALTER DATABASE や backend の強制終了が制限されていることがあり、代わりに独自の Console、パラメータグループ、あるいは書き込み privileges の剥奪によって読み取り専用モードを提供している場合があります。ソースを読み取り専用にする同等の方法については、ご利用の provider のドキュメントを参照してください。ステップ2: 行数を検証する
検証対象とするレプリケートテーブルを選択します。ClickPipes は選択された各テーブルの行数をソースとターゲットの両方でカウントし、比較します。大規模なテーブルでは、概算の行数が返される場合があります。すべてのテーブルを検証する場合は Select all tables を使用し、個別に指定する場合は対象のテーブルを検索してトグルで選択したうえで、Count rows をクリックします。ステップ3: パイプを一時停止する
シーケンスをリセットしてトラフィックを切り替える前にレプリケーションを停止するため、ClickPipe を一時停止します。Pause ClickPipe をクリックし、パイプが一時停止するまで待ってから次に進んでください。ステップ4: シーケンスをリセットする
以降の挿入が正しい値から続くように、宛先側でシーケンスをリセットします。Reset sequences をクリックすると、各シーケンスが対象テーブル内の現在の最大値に合わせて調整されます。ステップ 5: トラフィックを切り替える
アプリケーションのデータベース URL を Managed Postgres の接続文字列に変更し、読み取りと書き込みを Managed Postgres サービスに向けます。ウィザードでは接続情報が複数のフォーマット (url、psql、env、yaml、jdbc) で提供されるため、ご利用のスタックに合ったものをコピーしてください。アプリケーションの更新が完了したら、Mark as completed をクリックします。ステップ6: クリーンアップ
カットオーバーが完了し、新しいサービスが正常に稼働していることを確認したら、移行を削除してソース側のリソースを解放します。ウィザードには、スロット名があらかじめ入力されたpg_drop_replication_slot コマンドが表示されます。これをソース側で実行して、レプリケーションスロットを削除してください: