メインコンテンツへスキップ
ClickHouse Cloud には、外部 PostgreSQL データベースを Managed Postgres サービスに移行するための組み込みのインポートウィザードが用意されています。このウィザードでは、接続元の設定、スキーマのエクスポートとインポート、レプリケーション設定、テーブルの選択を、5 つのガイド付きステップで行います。

前提条件

  • レプリケーション権限を持つユーザーで、移行元の PostgreSQL データベースにアクセスできること。
  • 移行先となる ClickHouse Managed Postgres サービス。まだお持ちでない場合は、クイックスタートを参照してください。
  • ローカルマシンに pg_dumppsql がインストールされていること。どちらも標準の PostgreSQL クライアントツールに含まれています。

移行前の考慮事項

  • DDL の伝播: 継続的レプリケーション (CDC (変更データキャプチャ) ) では、DML 操作と ADD COLUMN がキャプチャされます。DROP COLUMNALTER COLUMN などのその他の DDL 変更は伝播されないため、ターゲット側で手動で適用する必要があります。

ステップ 1: ソースデータベースに接続する

ClickHouse Cloud コンソール を開き、Managed Postgres サービスを選択します。 左側のサイドバーで Data sources をクリックします。 Start import をクリックします。 ソース PostgreSQL データベースの接続情報 (ホスト、ポート、ユーザー名、パスワード、データベース名) を入力します。必要に応じて TLS を有効にします。 ソースデータベースへのプライベート接続が必要な場合は、SSH tunneling を選択し、必要な SSH 情報を入力できます。これにより、公開されていないデータベースにも移行プロセスから安全に接続できます。 インジェスト方法を選択します。
  • 初期ロード + CDC (変更データキャプチャ) — 既存のデータをコピーした後、以降の変更を継続的に同期します。
  • 初期ロードのみ — 一回限りのコピーで、継続的なレプリケーションは行いません。
  • CDC (変更データキャプチャ) のみ — 初期コピーをスキップし、この時点以降の新しい変更のみをレプリケートします。
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 サービスにインポートする

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

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

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

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

レプリケートするテーブルを選択します。テーブルはスキーマごとにまとめられています。個別のテーブルを選択することも、スキーマを展開してその配下をすべて選択することもできます。 移行を作成 をクリックします。

移行を監視する

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

移行後のタスク

初期ロードが完了し、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 サービスに向け、エラー、制約違反、レプリケーションの健全性を監視します。 クリーンアップします。 切り替え後、新しいサービスが正常であることを確認したら、Data sources から移行を削除します。CDC (変更データキャプチャ) を使用した場合は、リソースを解放するため、ソース側のレプリケーションスロットを削除します:
SELECT pg_drop_replication_slot('<slot_name>');

次のステップ

最終更新日 2026年6月10日