このガイドでは、Postgres のネイティブな論理レプリケーションを使用して PostgreSQL データベースを ClickHouse Managed Postgres に移行する方法を、手順を追って説明します。
ベータ前提条件
- ソース PostgreSQL データベースにアクセスできること。
psql,pg_dump、pg_restoreがローカルマシンにインストールされていること。これらは、移行先データベースに空のテーブルを作成するために使用します。通常は PostgreSQL のインストールに含まれています。含まれていない場合は、PostgreSQL 公式サイト からダウンロードできます。- ソースデータベースが ClickHouse Managed Postgres からアクセス可能である必要があります。この接続を許可するために必要なファイアウォールルールまたはセキュリティグループの設定を確認してください。ClickHouse Managed Postgres インスタンスの送信元 IP は、次のように確認できます。
dig +short <your-managed-postgres-hostname>セットアップ
論理レプリケーションを機能させるには、ソースデータベースが正しく設定されていることを確認する必要があります。主な要件は次のとおりです。
- ソースデータベースでは、
wal_levelをlogicalに設定する必要があります。 - ソースデータベースでは、
max_replication_slotsを少なくとも1に設定する必要があります。 - RDS (このガイドでは例として使用) では、パラメータグループで
rds.logical_replicationが1に設定されていることを確認する必要があります。 - ソースデータベースのユーザーには、
REPLICATION権限が必要です。RDS の場合は、次を実行します。GRANT rds_replication TO <your-username>; - 移行先データベースに使用するロールには、移行先データベースのオブジェクトに対する書き込み権限が必要です。
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;
ソースデータベースが次のように設定されていることを確認してください。

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

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

スキーマを ClickHouse Managed Postgres に復元する
スキーマダンプの準備ができたので、pg_restore を使ってこれを ClickHouse Managed Postgres インスタンスに復元できます。
pg_restore \
-d 'postgresql://<user>:<password>@<host>:<port>/<database>' \
--verbose \
rds-dumpここでは:
<user>、<password>、<host>、<port>、<database>を、移行先の ClickHouse Managed Postgres データベースの認証情報に置き換えます。--verboseは、restore 処理中の詳細な出力を表示します。 このコマンドは、データを含めずに、移行先データベース内にすべてのテーブル、索引、ビュー、その他のスキーマオブジェクトを作成します。
この例では、このコマンドを実行すると 2 つのテーブルが作成され、どちらも空の状態になります:

論理レプリケーションを設定する
スキーマの準備が整ったら、ソースデータベースから移行先の ClickHouse Managed Postgres データベースへの論理レプリケーションを設定します。これには、ソースデータベースで publication を作成し、移行先データベースで subscription を作成します。
ソースデータベースで publication を作成する
ソースの PostgreSQL データベースに接続し、複製するテーブルを含む publication を作成します。
CREATE PUBLICATION <pub_name> FOR TABLE table1, table2...;移行先の ClickHouse Managed Postgres データベースにsubscriptionを作成する
次に、移行先の ClickHouse Managed Postgres データベースに接続し、ソースデータベースのpublicationに接続するsubscriptionを作成します。
CREATE SUBSCRIPTION demo_rds_subscription
CONNECTION 'postgresql://<user>:<password>@<host>:<port>/<database>'
PUBLICATION <pub_name_you_entered_above>;これにより、ソースデータベース上にレプリケーションスロットが自動的に自動作成され、指定したテーブルから移行先データベースへのデータのレプリケーションが開始されます。データ量によっては、この処理に時間がかかる場合があります。
この例では、subscriptionの設定後、データが流入しました。

以降、ソースデータベースに新たに挿入された行は、ほぼリアルタイムで移行先の ClickHouse Managed Postgres データベースにレプリケートされます。
注意事項と考慮点
- 論理レプリケーションで複製されるのは、データの変更 (INSERT、UPDATE、DELETE) のみです。スキーマの変更 (ALTER TABLE など) は別途対応する必要があります。
- レプリケーションの中断を避けるため、ソースデータベースと移行先データベース間のネットワーク接続が安定していることを確認してください。
- 移行先データベースがソースデータベースに追従できていることを確認するため、レプリケーションの遅延を監視してください。ソースデータベースで
max_slot_wal_keep_sizeに適切な値を設定すると、増大するレプリケーションスロットを管理しやすくなり、ディスク容量の過剰な消費を防げます。 - ユースケースによっては、レプリケーション処理に対する監視やアラートを設定するとよいでしょう。
次のステップ
おめでとうございます。pg_dump と pg_restore を使用して、PostgreSQL データベースを ClickHouse Managed Postgres に正常に移行できました。これで、ClickHouse Managed Postgres の機能や ClickHouse とのインテグレーションを活用する準備が整いました。使い始めるには、次の 10 分間のクイックスタートをご覧ください。