メインコンテンツへスキップ
ClickHouse Cloud では、外部の PostgreSQL データベースを Managed Postgres サービス に移行するための ClickPipes をご利用いただけるようになりました。この組み込みインテグレーションにより、ソースデータベースへの接続、スキーマのエクスポート、Managed Postgres へのインポート、継続的なレプリケーションの設定をスムーズに行えます。

前提条件

移行前の注意事項

  • DDL の伝播: 継続的レプリケーション (CDC) は、DML 操作と ADD COLUMN を取り込みます。DROP COLUMNALTER COLUMN など、その他の DDL 変更は伝播されないため、ターゲット側で手動で適用する必要があります。
移行中に問題が発生した場合は、よくあるエラーとその解決策について Managed Postgres 移行のよくある質問 を確認してください。

Step 1: ソースデータベースに接続する

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

ステップ2: データベースのスキーマをエクスポートする

ウィザードには、ソースの接続情報があらかじめ入力された pg_dump コマンドが表示されます。これをターミナルで実行します。
pg_dump \
  -h <source_host> \
  -U <source_user> \
  -d <source_database> \
  --schema-only \
  -f pg.sql
これにより、現在のディレクトリに pg.sql が作成されます。 Next をクリックします。

ステップ3: スキーマを Managed Postgres サービスにインポートする

ドロップダウンから宛先データベースを選択するか、新しくプロビジョニングする場合は 新しいデータベースを作成 をクリックします。 ウィザードには、スキーマダンプを Managed Postgres サービスに適用するための psql コマンドが表示されます。これをターミナルで実行してください。
psql \
  -h <target_host> \
  -p 5432 \
  -U <target_user> \
  -d <target_database> \
  -f pg.sql
次へ をクリックします。

Step 4: インジェスト設定を構成する

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

ステップ5: テーブルを選択

レプリケートするテーブルを選択します。テーブルはスキーマごとにグループ化されています。個別にテーブルを選択するか、スキーマを展開してその中のすべてのテーブルを選択します。 移行を作成 をクリックします。

移行を監視する

移行を作成すると、データソースにステータスが 実行中 として表示されます。 移行をクリックすると、詳細ビューが開きます。テーブル タブには、処理済み行数、パーティション数、パーティションあたりの平均時間など、各テーブルの初期ロードの進行状況が表示されます。メトリクス タブには、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>');

次のステップ

最終更新日 2026年6月10日