> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-revert-104359-revert-104251-parquet-single.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# ClickPipes のデータソースを使用した PostgreSQL データの移行

> ClickPipes を使用して、PostgreSQL データベースを ClickHouse Managed Postgres に移行する方法を学びます。

export const Image = ({img, alt, size = "lg"}) => {
  const normalizedSize = ["sm", "md", "lg"].includes(size) ? size : "lg";
  return <div className={`ch-image-${normalizedSize}`}>
      <Frame>
        <img src={img} alt={alt} />
      </Frame>
    </div>;
};

export const BetaBadge = ({link, galaxyTrack, galaxyEvent}) => {
  if (link) {
    return <a href={link} target="_blank" rel="noopener noreferrer" className="betaBadge" onClick={galaxyTrack && galaxyEvent ? galaxyOnClick(galaxyEvent) : undefined}>
                <span>ベータ</span>
            </a>;
  }
  return <a href="https://clickhouse.com/docs/reference/settings/beta-and-experimental-features#beta-features" className="betaBadge">
            <span>ベータ機能</span>
        </a>;
};

<BetaBadge link="https://clickhouse.com/cloud/postgres" galaxyTrack={true} galaxyEvent="docs.managed-postgres.migration-guide-clickhouse-cloud-beta" />

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

<div id="prerequisites">
  ## 前提条件
</div>

* レプリケーション権限を持つユーザーで、ソース PostgreSQL データベースにアクセスできること。ソースに応じて、以下のセットアップガイドに従ってください。
  * [Amazon RDS Postgres](/ja/integrations/clickpipes/postgres/source/rds)
  * [Amazon Aurora Postgres](/ja/integrations/clickpipes/postgres/source/aurora)
  * [Supabase Postgres](/ja/integrations/clickpipes/postgres/source/supabase)
  * [Google Cloud SQL Postgres](/ja/integrations/clickpipes/postgres/source/google-cloudsql)
  * [Azure Flexible Server for Postgres](/ja/integrations/clickpipes/postgres/source/azure-flexible-server-postgres)
  * [Neon Postgres](/ja/integrations/clickpipes/postgres/source/neon-postgres)
  * [Crunchy Bridge Postgres](/ja/integrations/clickpipes/postgres/source/crunchy-postgres)
  * [TimescaleDB](/ja/integrations/clickpipes/postgres/source/timescale)
  * その他のプロバイダーまたはセルフホストのインスタンスについては、[Generic Postgres Source](/ja/integrations/clickpipes/postgres/source/generic)
* 移行先として ClickHouse Managed Postgres サービスが必要です。まだ用意していない場合は、[クイックスタート](/ja/products/managed-postgres/quickstart) を参照してください。
* ローカルマシンに `pg_dump` と `psql` がインストールされていること。どちらも標準の PostgreSQL クライアントツールに含まれています。

<div id="considerations">
  ## 移行前の注意事項
</div>

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

<Note>
  移行中に問題が発生した場合は、よくあるエラーとその解決策について [Managed Postgres 移行のよくある質問](/ja/products/managed-postgres/migrations/faq) を確認してください。
</Note>

<div id="step-1-connect">
  ## Step 1: ソースデータベースに接続する
</div>

[ClickHouse Cloud console](https://clickhouse.cloud) を開き、Managed Postgres サービスを選択します。

<Image img="https://mintcdn.com/private-7c7dfe99-revert-104359-revert-104251-parquet-single/g8hpkImHjWTMvqC-/images/managed-postgres/pgpg/servicecard.webp?fit=max&auto=format&n=g8hpkImHjWTMvqC-&q=85&s=289741405a0299a5867abc1423c56bc3" alt="ClickHouse Cloud のサービス一覧に表示される Managed Postgres のサービスカード" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/servicecard.webp" />

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

<Image img="https://mintcdn.com/private-7c7dfe99-revert-104359-revert-104251-parquet-single/g8hpkImHjWTMvqC-/images/managed-postgres/pgpg/overview.webp?fit=max&auto=format&n=g8hpkImHjWTMvqC-&q=85&s=5990542940214be859f2a20c494502b2" alt="Managed Postgres サービスのサイドバーにある データソース エントリ" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/overview.webp" />

**Start import** をクリックします。

<Image img="https://mintcdn.com/private-7c7dfe99-revert-104359-revert-104251-parquet-single/g8hpkImHjWTMvqC-/images/managed-postgres/pgpg/startimport.webp?fit=max&auto=format&n=g8hpkImHjWTMvqC-&q=85&s=4716cc9d860f2f0d9522b6ea99e0c0e9" alt="Start import ボタンが表示された データソース ページ" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/startimport.webp" />

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

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

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

* **初期ロード + CDC** — 既存データをコピーした後、継続的な変更を反映してターゲットを同期し続けます。
* **初期ロード only** — 一回限りのコピーで、継続的なレプリケーションは行いません。
* **CDC only** — 初期コピーをスキップし、この時点以降の新しい変更だけをレプリケートします。

<Image img="https://mintcdn.com/private-7c7dfe99-revert-104359-revert-104251-parquet-single/g8hpkImHjWTMvqC-/images/managed-postgres/pgpg/migrationform.webp?fit=max&auto=format&n=g8hpkImHjWTMvqC-&q=85&s=79dfe4a2ce35b448c0c59e1ff4e97582" alt="ステップ 1: インジェスト方法のオプションを含むソースデータベース接続フォーム" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/migrationform.webp" />

**Next** をクリックします。

<div id="automated-schema-migration">
  ## 自動スキーマ移行
</div>

<Image img="https://mintcdn.com/private-7c7dfe99-revert-104359-revert-104251-parquet-single/76_4bqp95JvxWs34/images/managed-postgres/pg_dump_restore/automated.webp?fit=max&auto=format&n=76_4bqp95JvxWs34&q=85&s=18e2f35e5eb5012e329be8aed22313c4" alt="ステップ 2: 宛先データベースセレクターを使用した自動スキーマ移行" size="lg" border width="2632" height="742" data-path="images/managed-postgres/pg_dump_restore/automated.webp" />

このオプションを選択すると、ClickPipe の作成後、[Setup フェーズ](/ja/integrations/clickpipes/postgres/lifecycle#setup)中にソースデータベースのスキーマが自動的に取得され、Managed Postgres サービスに適用されます。

この機能では、後でウィザードで選択するテーブルにかかわらずソースデータベース内のすべてのデータベースオブジェクトを取得するため、**空の宛先データベース**が前提となります。宛先データベースに既存のデータがある場合や、より細かく設定したい場合は、代わりに[**手動**](#manual-schema-migration)モードを選択する必要があります。

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

<Image img="https://mintcdn.com/private-7c7dfe99-revert-104359-revert-104251-parquet-single/76_4bqp95JvxWs34/images/managed-postgres/pg_dump_restore/newdb.webp?fit=max&auto=format&n=76_4bqp95JvxWs34&q=85&s=2efc6920d5bac8606aa67669e1d81d77" alt="新しい Postgres データベースを作成するダイアログ" size="lg" border width="1642" height="742" data-path="images/managed-postgres/pg_dump_restore/newdb.webp" />

<div id="monitoring">
  ### 監視
</div>

ClickPipes の詳細ビューで、スキーマ移行の進行状況を確認できます。**ログ**にはスキーマ移行のステータスが表示され、発生したエラーも表示されます。

このモードには、次の制限があります。

* SSH トンネリングを使用するパイプでは、自動スキーマ移行を使用できません。スキーマは[手動でエクスポートおよびインポート](#manual-schema-migration)する必要があります。

<div id="manual-schema-migration">
  ## 手動スキーマ移行
</div>

移行先データベースにすでにデータが存在する場合や、自動モードで想定されるクリーンな状態ではなく、よりカスタマイズしたセットアップを行う場合は、ここで**手動**モードを選択できます。

<Image img="https://mintcdn.com/private-7c7dfe99-revert-104359-revert-104251-parquet-single/76_4bqp95JvxWs34/images/managed-postgres/pg_dump_restore/manual.webp?fit=max&auto=format&n=76_4bqp95JvxWs34&q=85&s=c576b22c0898bcdf971c58091be56a0e" alt="ステップ2: pg_dumpエクスポートコマンドによる手動スキーマ移行" size="lg" border width="2632" height="1022" data-path="images/managed-postgres/pg_dump_restore/manual.webp" />

<div id="step-2-export-schema">
  ### データベーススキーマをエクスポートする
</div>

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

<Image img="https://mintcdn.com/private-7c7dfe99-revert-104359-revert-104251-parquet-single/g8hpkImHjWTMvqC-/images/managed-postgres/pgpg/nextexport.webp?fit=max&auto=format&n=g8hpkImHjWTMvqC-&q=85&s=24b6cd4f45113a8c2df3404de2b38fb2" alt="ステップ 2: スキーマのエクスポート用 `pg_dump` コマンド" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/nextexport.webp" />

```shell theme={null}
pg_dump \
  -h <source_host> \
  -U <source_user> \
  -d <source_database> \
  --schema-only \
  -f pg.sql
```

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

<Image img="https://mintcdn.com/private-7c7dfe99-revert-104359-revert-104251-parquet-single/g8hpkImHjWTMvqC-/images/managed-postgres/pgpg/psqlexport.webp?fit=max&auto=format&n=g8hpkImHjWTMvqC-&q=85&s=964b2087e1cf5957ff507a4287a90b09" alt="`pg_dump` 実行後のターミナル出力" size="lg" border width="1452" height="422" data-path="images/managed-postgres/pgpg/psqlexport.webp" />

**Next** をクリックします。

<div id="step-3-import-schema">
  ### Managed Postgres サービスにスキーマをインポートする
</div>

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

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

<Image img="https://mintcdn.com/private-7c7dfe99-revert-104359-revert-104251-parquet-single/g8hpkImHjWTMvqC-/images/managed-postgres/pgpg/nextimport.webp?fit=max&auto=format&n=g8hpkImHjWTMvqC-&q=85&s=d49484c6fb84089a91ee7cc7e92b3544" alt="ステップ 3: スキーマのインポート用 `psql` コマンド" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/nextimport.webp" />

```shell theme={null}
psql \
  -h <target_host> \
  -p 5432 \
  -U <target_user> \
  -d <target_database> \
  -f pg.sql
```

<Image img="https://mintcdn.com/private-7c7dfe99-revert-104359-revert-104251-parquet-single/g8hpkImHjWTMvqC-/images/managed-postgres/pgpg/psqlimport.webp?fit=max&auto=format&n=g8hpkImHjWTMvqC-&q=85&s=79ff27ca6baab542a892a954c90f8313" alt="`psql` によるスキーマのインポート実行後のターミナル出力" size="lg" border width="2362" height="762" data-path="images/managed-postgres/pgpg/psqlimport.webp" />

**Next** をクリックします。

<div id="step-4-ingestion-settings">
  ## Step 4: インジェスト設定を構成する
</div>

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

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

| 設定                     | デフォルト   | 説明                          |
| ---------------------- | ------- | --------------------------- |
| 同期間隔 (秒)               | 10      | レプリケーションスロットをポーリングする間隔      |
| 初期ロードの並列スレッド数          | 4       | bulk copy フェーズで使用するスレッド数    |
| Pull バッチサイズ            | 100,000 | レプリケーションの各バッチで取得する行数        |
| スナップショットのパーティションあたりの行数 | 100000  | 大規模なテーブルスナップショットのパーティションサイズ |
| 並列でスナップショットを作成するテーブル数  | 1       | 同時実行でスナップショットを作成するテーブル数     |

<Image img="https://mintcdn.com/private-7c7dfe99-revert-104359-revert-104251-parquet-single/g8hpkImHjWTMvqC-/images/managed-postgres/pgpg/advancedsettings.webp?fit=max&auto=format&n=g8hpkImHjWTMvqC-&q=85&s=694cd7a04e7f0b4328d6d3b27f54928d" alt="ステップ 4: パブリケーションと高度なレプリケーションオプションを含むインジェスト設定フォーム" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/advancedsettings.webp" />

**Next** をクリックします。

<div id="step-5-select-tables">
  ## ステップ5: テーブルを選択
</div>

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

<Image img="https://mintcdn.com/private-7c7dfe99-revert-104359-revert-104251-parquet-single/g8hpkImHjWTMvqC-/images/managed-postgres/pgpg/tablepicker.webp?fit=max&auto=format&n=g8hpkImHjWTMvqC-&q=85&s=f115cc6daa9c88ffdbe0bdcc5c49c3d8" alt="ステップ5: スキーマごとにグループ化されたテーブル選択画面。［移行を作成］ボタン付き" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/tablepicker.webp" />

**移行を作成** をクリックします。

<div id="monitor">
  ## 移行を監視する
</div>

移行を作成すると、**データソース**にステータスが **実行中** として表示されます。

<Image img="https://mintcdn.com/private-7c7dfe99-revert-104359-revert-104251-parquet-single/g8hpkImHjWTMvqC-/images/managed-postgres/pgpg/migrationlist.webp?fit=max&auto=format&n=g8hpkImHjWTMvqC-&q=85&s=f48d58085d584d813b98568c3b21f5b8" alt="実行中の移行が表示されたデータソース一覧" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/migrationlist.webp" />

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

<Image img="https://mintcdn.com/private-7c7dfe99-revert-104359-revert-104251-parquet-single/g8hpkImHjWTMvqC-/images/managed-postgres/pgpg/initialload.webp?fit=max&auto=format&n=g8hpkImHjWTMvqC-&q=85&s=600899644142bb7b4034953845d86565" alt="テーブルごとの初期ロード統計を表示する移行詳細ビュー" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/initialload.webp" />

<div id="post-migration">
  ## 移行後のタスク
</div>

初期ロードが完了し、CDC を使用している場合はレプリケーションラグがほぼゼロになったら、次の作業を行います。

**行数を確認します。** トラフィックを切り替える前に、移行元と移行先の両方で重要なテーブルを抜き取りで確認してください。

```sql theme={null}
SELECT COUNT(*) FROM public.orders;
```

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

```sql theme={null}
ALTER DATABASE <source_db> SET default_transaction_read_only = on;
```

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

```sql theme={null}
-- ソースとターゲットの両方で実行
SELECT MAX(id), MAX(updated_at) FROM public.orders;
```

**シーケンスをリセットします。** 各テーブルの現在の最大値に合わせて、シーケンスを調整します:

```sql theme={null}
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 を使用した場合は、リソースを解放するために移行元からレプリケーションスロットを削除します:

```sql theme={null}
SELECT pg_drop_replication_slot('<slot_name>');
```

<div id="next-steps">
  ## 次のステップ
</div>

* [Managed Postgres クイックスタート](/ja/products/managed-postgres/quickstart)
* [Managed Postgres の接続情報](/ja/products/managed-postgres/connection)
* [ClickPipes Postgres のよくある質問](/ja/integrations/clickpipes/postgres/faq)
