ClickHouse Cloud では、外部の PostgreSQL データベースを Managed Postgres サービスに移行するための ClickPipes をご利用いただけるようになりました。この組み込みインテグレーションにより、ソースデータベースへの接続、スキーマのエクスポート、Managed Postgres へのインポート、継続的なレプリケーションの設定をスムーズに行えます。
前提条件
- レプリケーション権限を持つユーザーで、ソース PostgreSQL データベースにアクセスできること。ソースに応じて、以下のセットアップガイドに従ってください。
- 移行先として ClickHouse Managed Postgres サービスが必要です。まだ用意していない場合は、クイックスタート を参照してください。
- ローカルマシンに
pg_dumpとpsqlがインストールされていること。どちらも標準の PostgreSQL クライアントツールに含まれています。
移行前の注意事項
- DDL の伝播: 継続的レプリケーション (CDC) は、DML 操作と
ADD COLUMNを取り込みます。DROP COLUMNやALTER COLUMNなど、その他の DDL 変更は伝播されないため、ターゲット側で手動で適用する必要があります。
Step 1: ソースデータベースに接続する
ClickHouse Cloud console を開き、Managed Postgres サービスを選択します。

左側のサイドバーで、データソース をクリックします。

Start import をクリックします。

ソース PostgreSQL データベースの接続情報 (ホスト、ポート、ユーザー名、パスワード、データベース名) を入力します。ソース側で必要な場合は、TLS を有効にします。
ソースデータベースへのプライベート接続が必要な場合は、SSH トンネリング を選択し、必要な SSH 情報を入力できます。これにより、公開されていないデータベースにも移行処理から安全に接続できます。
インジェスト方法を選択します。
- 初期ロード + CDC — 既存データをコピーした後、継続的な変更を反映してターゲットを同期し続けます。
- 初期ロード only — 一回限りのコピーで、継続的なレプリケーションは行いません。
- CDC only — 初期コピーをスキップし、この時点以降の新しい変更だけをレプリケートします。

Next をクリックします。
自動スキーマ移行

このオプションを選択すると、ClickPipe の作成後、Setup フェーズ中にソースデータベースのスキーマが自動的に取得され、Managed Postgres サービスに適用されます。
この機能では、後でウィザードで選択するテーブルにかかわらずソースデータベース内のすべてのデータベースオブジェクトを取得するため、空の宛先データベースが前提となります。宛先データベースに既存のデータがある場合や、より細かく設定したい場合は、代わりに手動モードを選択する必要があります。
ドロップダウンから宛先データベースを選択するか、新しいデータベースを作成をクリックして作成します。

監視
ClickPipes の詳細ビューで、スキーマ移行の進行状況を確認できます。ログにはスキーマ移行のステータスが表示され、発生したエラーも表示されます。
このモードには、次の制限があります。
- SSH トンネリングを使用するパイプでは、自動スキーマ移行を使用できません。スキーマは手動でエクスポートおよびインポートする必要があります。
手動スキーマ移行
移行先データベースにすでにデータが存在する場合や、自動モードで想定されるクリーンな状態ではなく、よりカスタマイズしたセットアップを行う場合は、ここで手動モードを選択できます。

データベーススキーマをエクスポートする
ウィザードには、ソースへの接続情報があらかじめ入力された pg_dump コマンドが表示されます。これをターミナルで実行します。

pg_dump \
-h <source_host> \
-U <source_user> \
-d <source_database> \
--schema-only \
-f pg.sqlこれにより、pg.sql が現在のディレクトリに作成されます。

Next をクリックします。
Managed Postgres サービスにスキーマをインポートする
ドロップダウンから宛先データベースを選択するか、新しいデータベースを作成 をクリックして新しく作成します。
ウィザードには、スキーマダンプを Managed Postgres サービスに適用するための psql コマンドが表示されます。これをターミナルで実行します。

psql \
-h <target_host> \
-p 5432 \
-U <target_user> \
-d <target_database> \
-f pg.sql
Next をクリックします。
Step 4: インジェスト設定を構成する
論理レプリケーションに使用するパブリケーションを指定します。空欄のままにすると、パブリケーションは自動的に作成されます。
スループットを調整するには、高度なレプリケーション設定を展開します。
| 設定 | デフォルト | 説明 |
|---|---|---|
| 同期間隔 (秒) | 10 | レプリケーションスロットをポーリングする間隔 |
| 初期ロードの並列スレッド数 | 4 | bulk copy フェーズで使用するスレッド数 |
| Pull バッチサイズ | 100,000 | レプリケーションの各バッチで取得する行数 |
| スナップショットのパーティションあたりの行数 | 100000 | 大規模なテーブルスナップショットのパーティションサイズ |
| 並列でスナップショットを作成するテーブル数 | 1 | 同時実行でスナップショットを作成するテーブル数 |

Next をクリックします。
ステップ5: テーブルを選択
レプリケートするテーブルを選択します。テーブルはスキーマごとにグループ化されています。個別にテーブルを選択するか、スキーマを展開してその中のすべてのテーブルを選択します。
![ステップ5: スキーマごとにグループ化されたテーブル選択画面。[移行を作成]ボタン付き](/docs/images/managed-postgres/pgpg/tablepicker.webp)
移行を作成 をクリックします。
移行を監視する
移行を作成すると、データソースにステータスが 実行中 として表示されます。

移行をクリックすると、詳細ビューが開きます。テーブル タブには、処理済み行数、パーティション数、パーティションあたりの平均時間など、各テーブルの初期ロードの進行状況が表示されます。メトリクス タブには、CDC が開始されるとレプリケーションラグとスループットが表示されます。

移行後のタスク
初期ロードが完了し、CDC を使用している場合はレプリケーションラグがほぼゼロになったら、次の作業を行います。
行数を確認します。 トラフィックを切り替える前に、移行元と移行先の両方で重要なテーブルを抜き取りで確認してください。
SELECT COUNT(*) FROM public.orders;移行元への書き込みを停止します。 アプリケーションからの書き込みを一時停止します。切り替え中に読み取り専用モードを強制するには:
ALTER DATABASE <source_db> SET default_transaction_read_only = on;レプリケーションが追いついていることを確認します。 ソース側とターゲット側の最新行を比較します。
-- ソースとターゲットの両方で実行
SELECT MAX(id), MAX(updated_at) FROM public.orders;シーケンスをリセットします。 各テーブルの現在の最大値に合わせて、シーケンスを調整します:
DO $$
DECLARE r RECORD;
BEGIN
FOR r IN
SELECT
n.nspname AS schema_name,
c.relname AS table_name,
a.attname AS column_name,
pg_get_serial_sequence(format('%I.%I', n.nspname, c.relname), a.attname) AS seq_name
FROM pg_class c
JOIN pg_namespace n ON n.oid = c.relnamespace
JOIN pg_attribute a ON a.attrelid = c.oid
WHERE c.relkind = 'r'
AND a.attnum > 0
AND NOT a.attisdropped
AND n.nspname NOT IN ('pg_catalog', 'information_schema')
LOOP
IF r.seq_name IS NOT NULL THEN
EXECUTE format(
'SELECT setval(%L, COALESCE((SELECT MAX(%I) FROM %I.%I), 0) + 1, false)',
r.seq_name, r.column_name, r.schema_name, r.table_name
);
END IF;
END LOOP;
END $$;アプリケーショントラフィックを切り替えます。 読み取り先と書き込み先を Managed Postgres サービスに切り替え、エラー、制約違反、レプリケーションの健全性を監視します。
クリーンアップ。 切り替え後、新しいサービスが正常に稼働していることを確認したら、データソース から移行を削除します。CDC を使用した場合は、リソースを解放するために移行元からレプリケーションスロットを削除します:
SELECT pg_drop_replication_slot('<slot_name>');