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

# ClickHouse Managed Postgres への論理レプリケーションを使用した移行

> 論理レプリケーションを使用して 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>Beta</span>
            </a>;
  }
  return <div className="betaBadge">
            <Icon />
            <span>
                Beta feature. 
                <u>
                    <a href="/docs/beta-and-experimental-features#beta-features">
                        Learn more.
                    </a>
                </u>
            </span>
        </div>;
};

このガイドでは、Postgres のネイティブな論理レプリケーションを使用して PostgreSQL データベースを ClickHouse Managed Postgres に移行する方法を、手順を追って説明します。

<div id="migration-logical-replication-prerequisites">
  ## 前提条件
</div>

* ソース PostgreSQL データベースにアクセスできること。
* `psql`,`pg_dump`、`pg_restore` がローカルマシンにインストールされていること。これらは、ターゲットデータベースに空のテーブルを作成するために使用します。通常は PostgreSQL のインストールに含まれています。含まれていない場合は、[PostgreSQL 公式サイト](https://www.postgresql.org/download/) からダウンロードできます。
* ソースデータベースが ClickHouse Managed Postgres からアクセス可能である必要があります。この接続を許可するために必要なファイアウォールルールまたはセキュリティグループの設定を確認してください。Managed Postgres インスタンスの送信元 IP は、次のように確認できます。

```shell theme={null}
dig +short <your-managed-postgres-hostname>
```

<div id="migration-logical-replication-setup">
  ## セットアップ
</div>

論理レプリケーションを機能させるには、ソースデータベースが正しく設定されていることを確認する必要があります。主な要件は次のとおりです。

* ソースデータベースでは、`wal_level` を `logical` に設定する必要があります。
* ソースデータベースでは、`max_replication_slots` を少なくとも `1` に設定する必要があります。
* RDS (このガイドでは例として使用) では、パラメータグループで `rds.logical_replication` が `1` に設定されていることを確認する必要があります。
* ソースデータベースのユーザーには、`REPLICATION` 権限が必要です。RDS の場合は、次を実行します。
  ```sql theme={null}
  GRANT rds_replication TO <your-username>;
  ```
* 移行先データベースに使用するロールには、移行先データベースのオブジェクトに対する書き込み権限が必要です。
  ```sql theme={null}
  GRANT USAGE ON SCHEMA <schema_i> TO subscriber_user;
  GRANT CREATE ON DATABASE destination_db TO subscriber_user;
  GRANT pg_create_subscription TO subscriber_user;

  -- テーブル権限を付与
  GRANT INSERT, UPDATE, DELETE, TRUNCATE ON ALL TABLES IN SCHEMA <schema_i> TO subscriber_user;
  ```

ソースデータベースが次のように設定されていることを確認してください。

<Image img="https://mintcdn.com/private-7c7dfe99-fix-nav-issues/qT0j4CNmQubVqREl/images/managed-postgres/logical_replication/source-setup.png?fit=max&auto=format&n=qT0j4CNmQubVqREl&q=85&s=f55dd2a25db22de1773bc129abc14714" alt="ソース PostgreSQL レプリケーション設定" size="md" border width="1400" height="932" data-path="images/managed-postgres/logical_replication/source-setup.png" />

<div id="migration-logical-replication-schema-dump">
  ## ソースデータベースのスキーマのみをダンプする
</div>

論理レプリケーションを設定する前に、移行先データベースの ClickHouse Managed Postgres データベースにスキーマを作成する必要があります。これには、`pg_dump` を使用してソースデータベースのスキーマのみのダンプを作成します。

```shell theme={null}
pg_dump \
    -d 'postgresql://<user>:<password>@<host>:<port>/<database>' \
    -s \
    --format directory \
    -f rds-dump
```

ここでの各項目は次のとおりです。

* `<user>`、`<password>`、`<host>`、`<port>`、`<database>` は、ソースデータベースの認証情報に置き換えてください。
* `-s` は、スキーマのみのダンプを取得することを指定します。
* `--format directory` は、ダンプをディレクトリフォーマットで出力することを指定します。これは `pg_restore` に適しています。
* `-f rds-dump` は、ダンプファイルの出力先ディレクトリを指定します。このディレクトリは自動的に作成されるため、事前に存在していない必要があります。

この例では、`events` と `users` の 2 つのテーブルがあります。`events` には 100 万行、`users` には 1,000 行あります。

<Image img="https://mintcdn.com/private-7c7dfe99-fix-nav-issues/qT0j4CNmQubVqREl/images/managed-postgres/pg_dump_restore/source-setup.png?fit=max&auto=format&n=qT0j4CNmQubVqREl&q=85&s=172023020275391d1773c80d096a1969" alt="ソース PostgreSQL テーブルのセットアップ" size="xl" border width="3766" height="2312" data-path="images/managed-postgres/pg_dump_restore/source-setup.png" />

<div id="migration-pgdump-pg-restore-create-pg">
  ### Managed Postgres インスタンスを作成する
</div>

まず、Managed Postgres インスタンスが用意されていることを確認してください。可能であれば、ソースと同じリージョンに配置することをおすすめします。手順については、[こちら](/ja/products/managed-postgres/quickstart#create-postgres-database)のクイックガイドを参照してください。このガイドでは、次の構成を作成します。

<Image img="https://mintcdn.com/private-7c7dfe99-fix-nav-issues/qT0j4CNmQubVqREl/images/managed-postgres/pg_dump_restore/create-pg-for-migration.png?fit=max&auto=format&n=qT0j4CNmQubVqREl&q=85&s=966d2a5124a3a3802e8c1072112c7e9b" alt="ClickHouse Managed Postgres インスタンスを作成" size="md" border width="1532" height="1570" data-path="images/managed-postgres/pg_dump_restore/create-pg-for-migration.png" />

<div id="migration-logical-replication-restore-schema">
  ## スキーマを ClickHouse Managed Postgres に復元する
</div>

スキーマダンプの準備ができたので、`pg_restore` を使ってこれを ClickHouse Managed Postgres インスタンスに復元できます。

```shell theme={null}
pg_restore \
    -d 'postgresql://<user>:<password>@<host>:<port>/<database>' \
    --verbose \
    rds-dump
```

ここでは:

* `<user>`、`<password>`、`<host>`、`<port>`、`<database>` を、移行先の ClickHouse Managed Postgres データベースの認証情報に置き換えます。
* `--verbose` は、restore 処理中の詳細な出力を表示します。
  このコマンドは、データを含めずに、移行先データベース内にすべてのテーブル、索引、ビュー、その他のスキーマオブジェクトを作成します。

この例では、このコマンドを実行すると 2 つのテーブルが作成され、どちらも空の状態になります:

<Image img="https://mintcdn.com/private-7c7dfe99-fix-nav-issues/qT0j4CNmQubVqREl/images/managed-postgres/logical_replication/target-initial-setup.png?fit=max&auto=format&n=qT0j4CNmQubVqREl&q=85&s=cb1765a7349f5c579d6d8626b32e43dd" alt="移行先 ClickHouse Managed Postgres の初期セットアップ" size="xl" border width="2019" height="445" data-path="images/managed-postgres/logical_replication/target-initial-setup.png" />

<div id="migration-logical-replication-setup-replication">
  ## 論理レプリケーションを設定する
</div>

スキーマの準備が整ったら、ソースデータベースから移行先の ClickHouse Managed Postgres データベースへの論理レプリケーションを設定します。これには、ソースデータベースで publication を作成し、移行先データベースで subscription を作成します。

<div id="migration-logical-replication-create-publication">
  ### ソースデータベースで publication を作成する
</div>

ソースの PostgreSQL データベースに接続し、複製するテーブルを含む publication を作成します。

```sql theme={null}
CREATE PUBLICATION <pub_name> FOR TABLE table1, table2...;
```

<Info>
  publication を FOR ALL TABLES で作成すると、テーブル数が多い場合にネットワーク負荷が生じることがあります。レプリケートするテーブルだけを指定することをお勧めします。
</Info>

<div id="migration-logical-replication-create-subscription">
  ### 移行先データベースのClickHouse Managed Postgresデータベースにsubscriptionを作成する
</div>

次に、移行先データベースのClickHouse Managed Postgresデータベースに接続し、ソースデータベースのpublicationに接続するsubscriptionを作成します。

```sql theme={null}
CREATE SUBSCRIPTION demo_rds_subscription
CONNECTION 'postgresql://<user>:<password>@<host>:<port>/<database>'
PUBLICATION <pub_name_you_entered_above>;
```

これにより、ソースデータベース上にレプリケーションスロットが自動的に自動作成され、指定したテーブルから移行先データベースへのデータのレプリケーションが開始されます。データ量によっては、この処理に時間がかかる場合があります。

この例では、subscriptionの設定後、データが流入しました。

<Image img="https://mintcdn.com/private-7c7dfe99-fix-nav-issues/qT0j4CNmQubVqREl/images/managed-postgres/logical_replication/migration-result.png?fit=max&auto=format&n=qT0j4CNmQubVqREl&q=85&s=2a22a4c41382e425bf6b6ccd7a1c4cb3" alt="論理レプリケーション後の移行結果" size="xl" border width="1920" height="658" data-path="images/managed-postgres/logical_replication/migration-result.png" />

以降、ソースデータベースに新たに挿入された行は、ほぼリアルタイムで移行先データベースの ClickHouse Managed Postgres データベースにレプリケートされます。

<div id="migration-logical-replication-caveats">
  ## 注意事項と考慮点
</div>

* 論理レプリケーションで複製されるのは、データの変更 (INSERT、UPDATE、DELETE) のみです。スキーマの変更 (ALTER TABLE など) は別途対応する必要があります。
* レプリケーションの中断を避けるため、ソースデータベースと移行先データベース間のネットワーク接続が安定していることを確認してください。
* 移行先データベースがソースデータベースに追従できていることを確認するため、レプリケーションの遅延を監視してください。ソースデータベースで `max_slot_wal_keep_size` に適切な値を設定すると、増大するレプリケーションスロットを管理しやすくなり、ディスク容量の過剰な消費を防げます。
* ユースケースによっては、レプリケーション処理に対する監視やアラートを設定するとよいでしょう。

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

おめでとうございます。pg\_dump と pg\_restore を使用して、PostgreSQL データベースを ClickHouse Managed Postgres へ正常に移行できました。これで、Managed Postgres の機能や ClickHouse とのインテグレーションを試す準備は万全です。まずは 10 分で始められるクイックスタートをご覧ください。

* [Managed Postgres クイックスタートガイド](/ja/products/managed-postgres/quickstart)
