メインコンテンツへスキップ
メインコンテンツへスキップ

ClickPipes の Data sources を使用して PostgreSQL データを移行する

Beta

ClickHouse Cloud では、外部 PostgreSQL データベースを Managed Postgres サービスへ移行するための ClickPipes を提供しています。この組み込み統合により、ソースデータベースへの接続、スキーマのエクスポート、Managed Postgres へのインポート、継続的レプリケーションの設定を、効率的かつシームレスに行えます。

前提条件

移行前の注意点

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

移行中に問題が発生した場合は、一般的なエラーとその対処法について Managed Postgres Migrations FAQ を確認してください。

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

ClickHouse Cloud コンソールを開き、Managed Postgres サービスを選択します。

ClickHouse Cloud のサービス一覧にある Managed Postgres サービスカード

左側のサイドバーで、Data sourcesをクリックします。

Managed Postgres サービスのサイドバーにあるData sources項目

Start import をクリックします。

Start import ボタンが表示されたデータソースページ

ソース PostgreSQL データベースの接続情報 (ホスト、ポート、ユーザー名、パスワード、データベース名) を入力します。ソース側で必要な場合は、TLS を有効にします。

ソースデータベースへのプライベート接続が必要な場合は、SSH トンネリングを選択し、必要な SSH 情報を入力します。これにより、一般公開されていないデータベースにも移行処理から安全に接続できます。

インジェスト方法を選択します。

  • 初期ロード + CDC — 既存データをコピーした後、継続的な変更に合わせてターゲットを同期し続けます。
  • 初期ロードのみ — 一回限りのコピーで、継続的なレプリケーションは行いません。
  • CDC のみ — 初回コピーをスキップし、この時点以降の新しい変更のみをレプリケートします。
ステップ 1: インジェスト方法のオプションを含むソースデータベース接続フォーム

Next をクリックします。

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

ウィザードには、ソース接続情報が事前入力された pg_dump コマンドが表示されます。これをターミナルで実行してください。

ステップ 2: スキーマのエクスポート用 `pg_dump` コマンド
pg_dump \
  -h <source_host> \
  -U <source_user> \
  -d <source_database> \
  --schema-only \
  -f pg.sql

これにより、現在のディレクトリに pg.sql が作成されます。

`pg_dump` 実行後のターミナル出力

Next をクリックします。

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

ドロップダウンから宛先データベースを選択するか、Create a new database をクリックして新しく作成します。

ウィザードに、スキーマダンプを Managed Postgres サービスに適用するための psql コマンドが表示されます。これをターミナルで実行します。

ステップ 3: スキーマのインポート用 `psql` コマンド
psql \
  -h <target_host> \
  -p 5432 \
  -U <target_user> \
  -d <target_database> \
  -f pg.sql
psqlでスキーマをインポートした後のターミナル出力

「次へ」をクリックします。

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

論理レプリケーションに使用するパブリケーションを指定します。空欄のままにすると、パブリケーションが自動的に作成されます。

スループットを調整するには、高度なレプリケーション設定 を展開します:

設定デフォルト説明
同期間隔 (秒)10レプリケーションスロットをポーリングする頻度
初期ロードの並列スレッド数4一括コピーフェーズで使用するスレッド数
取得バッチサイズ100,000レプリケーションの各バッチで取得する行数
スナップショットのパーティションごとの行数100000大規模テーブルのスナップショットにおけるパーティションサイズ
並列でスナップショットするテーブル数1同時にスナップショットするテーブル数
ステップ 4: パブリケーションと高度なレプリケーションオプションを含むインジェスト設定フォーム

Next をクリックします。

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

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

ステップ 5: スキーマごとにグループ化されたテーブルピッカーと、Create migration ボタン

Create migration をクリックします。

移行を監視する

移行を作成すると、Data sourcesRunning ステータスで表示されます。

実行中の移行が表示された Data sources の一覧

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

テーブルごとの初期ロード統計が表示された移行の詳細ビュー

移行後のタスク

初期ロードが完了し、CDC (変更データキャプチャ) を使用している場合はレプリケーションラグがほぼゼロになったら、次の作業を実施します。

行数を確認します。 トラフィックを切り替える前に、ソース側とターゲット側の両方で重要なテーブルを抜き取り確認します。

SELECT COUNT(*) FROM public.orders;

移行元への書き込みを停止します。 アプリケーションからの書き込みを一時停止します。切り替え時に読み取り専用モードを適用するには:

ALTER DATABASE <source_db> SET default_transaction_read_only = on;

レプリケーションが追いついていることを確認します。 ソースとターゲットで最新の行を比較します:

-- Run on both source and target
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>');

次のステップ