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

# ClickHouse Cloud を使用して Managed Postgres へ移行する

> ClickHouse Cloud に組み込まれている Data sources のインポートウィザードを使用して、PostgreSQL データベースを ClickHouse Managed Postgres に移行する方法を紹介します。

export const Image = ({img, alt, size}) => {
  return <Frame>
      <img src={img} alt={alt} />
    </Frame>;
};

export const galaxyOnClick = eventName => () => {
  try {
    if (typeof window !== "undefined" && window.galaxy && eventName) {
      window.galaxy.track(eventName, {
        interaction: "click"
      });
    }
  } catch (e) {}
};

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}>
                <Icon />
                <span>ベータ</span>
            </a>;
  }
  return <div className="betaBadge">
            <Icon />
            <span>
                ベータ機能です。 
                <u>
                    <a href="/docs/beta-and-experimental-features#beta-features">
                        詳しくはこちら。
                    </a>
                </u>
            </span>
        </div>;
};

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

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

* レプリケーション権限を持つユーザーで、移行元の PostgreSQL データベースにアクセスできること。
* 移行先となる 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 変更は伝播されないため、ターゲット側で手動で適用する必要があります。

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

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

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-fbfa8bee/rF8ZX2ZZNpnwXrqH/images/managed-postgres/pgpg/servicecard.png?fit=max&auto=format&n=rF8ZX2ZZNpnwXrqH&q=85&s=35b4ed98588ee470642dfc7453b14d1a" alt="ClickHouse Cloud のサービス一覧にある Managed Postgres サービスカード" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/servicecard.png" />

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

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-fbfa8bee/rF8ZX2ZZNpnwXrqH/images/managed-postgres/pgpg/overview.png?fit=max&auto=format&n=rF8ZX2ZZNpnwXrqH&q=85&s=4f33e628dbcd912685a9ccb2faf181a8" alt="Managed Postgres サービスのサイドバーにある Data sources エントリ" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/overview.png" />

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

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-fbfa8bee/rF8ZX2ZZNpnwXrqH/images/managed-postgres/pgpg/startimport.png?fit=max&auto=format&n=rF8ZX2ZZNpnwXrqH&q=85&s=e4a89664b4c89fcc4eb1af0c6b899844" alt="Start import ボタンがある Data sources ページ" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/startimport.png" />

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

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

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

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

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

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

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

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

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

```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-mintlify-fbfa8bee/rF8ZX2ZZNpnwXrqH/images/managed-postgres/pgpg/psqlexport.png?fit=max&auto=format&n=rF8ZX2ZZNpnwXrqH&q=85&s=035b28f3e653c7a8b0580c2d8b6b5a70" alt="pg_dump 実行後のターミナル出力" size="lg" border width="1452" height="422" data-path="images/managed-postgres/pgpg/psqlexport.png" />

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

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

ドロップダウンから宛先データベースを選択するか、**Create a new database** をクリックして新しいデータベースをプロビジョニングします。

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

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

```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-mintlify-fbfa8bee/rF8ZX2ZZNpnwXrqH/images/managed-postgres/pgpg/psqlimport.png?fit=max&auto=format&n=rF8ZX2ZZNpnwXrqH&q=85&s=c1c8977b4647ab91cb89bb7fb3e420e9" alt="psql でスキーマをインポートした後のターミナル出力" size="lg" border width="2362" height="762" data-path="images/managed-postgres/pgpg/psqlimport.png" />

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

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

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

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

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

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-fbfa8bee/rF8ZX2ZZNpnwXrqH/images/managed-postgres/pgpg/advancedsettings.png?fit=max&auto=format&n=rF8ZX2ZZNpnwXrqH&q=85&s=46ba5acabe9c33441073e03007a685e7" alt="Step 4: publication と高度なレプリケーションオプションを含むインジェスト設定フォーム" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/advancedsettings.png" />

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

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

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

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-fbfa8bee/rF8ZX2ZZNpnwXrqH/images/managed-postgres/pgpg/tablepicker.png?fit=max&auto=format&n=rF8ZX2ZZNpnwXrqH&q=85&s=3fc4d8f0b598444b5f5c1c4d1bbad630" alt="ステップ 5: スキーマごとにまとめられたテーブル選択画面と移行を作成ボタン" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/tablepicker.png" />

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

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

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

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-fbfa8bee/rF8ZX2ZZNpnwXrqH/images/managed-postgres/pgpg/migrationlist.png?fit=max&auto=format&n=rF8ZX2ZZNpnwXrqH&q=85&s=52e602303778c89396e6bac313e01565" alt="実行中の移行が表示された Data sources の一覧" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/migrationlist.png" />

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

<Image img="https://mintcdn.com/private-7c7dfe99-mintlify-fbfa8bee/rF8ZX2ZZNpnwXrqH/images/managed-postgres/pgpg/initialload.png?fit=max&auto=format&n=rF8ZX2ZZNpnwXrqH&q=85&s=df0405da62ed47dcde506b5ff99a297c" alt="テーブルごとの初期ロード統計が表示された移行の詳細ビュー" size="lg" border width="3680" height="2392" data-path="images/managed-postgres/pgpg/initialload.png" />

<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 サービスに向け、エラー、制約違反、レプリケーションの健全性を監視します。

**クリーンアップします。**  切り替え後、新しいサービスが正常であることを確認したら、**Data sources** から移行を削除します。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)
