前提条件
- ソース PostgreSQL データベースにアクセスできること。
psql,pg_dump、pg_restoreがローカルマシンにインストールされていること。これらは、ターゲットデータベースに空のテーブルを作成するために使用します。通常は PostgreSQL のインストールに含まれています。含まれていない場合は、PostgreSQL 公式サイト からダウンロードできます。- ソースデータベースが ClickHouse Managed Postgres からアクセス可能である必要があります。この接続を許可するために必要なファイアウォールルールまたはセキュリティグループの設定を確認してください。Managed Postgres インスタンスの送信元 IP は、次のように確認できます。
セットアップ
- ソースデータベースでは、
wal_levelをlogicalに設定する必要があります。 - ソースデータベースでは、
max_replication_slotsを少なくとも1に設定する必要があります。 - RDS (このガイドでは例として使用) では、パラメータグループで
rds.logical_replicationが1に設定されていることを確認する必要があります。 - ソースデータベースのユーザーには、
REPLICATION権限が必要です。RDS の場合は、次を実行します。 - 移行先データベースに使用するロールには、移行先データベースのオブジェクトに対する書き込み権限が必要です。
ソースデータベースのスキーマのみをダンプする
pg_dump を使用してソースデータベースのスキーマのみのダンプを作成します。
<user>、<password>、<host>、<port>、<database>は、ソースデータベースの認証情報に置き換えてください。-sは、スキーマのみのダンプを取得することを指定します。--format directoryは、ダンプをディレクトリフォーマットで出力することを指定します。これはpg_restoreに適しています。-f rds-dumpは、ダンプファイルの出力先ディレクトリを指定します。このディレクトリは自動的に作成されるため、事前に存在していない必要があります。
events と users の 2 つのテーブルがあります。events には 100 万行、users には 1,000 行あります。
Managed Postgres インスタンスを作成する
スキーマを ClickHouse Managed Postgres に復元する
pg_restore を使ってこれを ClickHouse Managed Postgres インスタンスに復元できます。
<user>、<password>、<host>、<port>、<database>を、移行先の ClickHouse Managed Postgres データベースの認証情報に置き換えます。--verboseは、restore 処理中の詳細な出力を表示します。 このコマンドは、データを含めずに、移行先データベース内にすべてのテーブル、索引、ビュー、その他のスキーマオブジェクトを作成します。
論理レプリケーションを設定する
ソースデータベースで publication を作成する
publication を FOR ALL TABLES で作成すると、テーブル数が多い場合にネットワーク負荷が生じることがあります。レプリケートするテーブルだけを指定することをお勧めします。
移行先データベースのClickHouse Managed Postgresデータベースにsubscriptionを作成する
注意事項と考慮点
- 論理レプリケーションで複製されるのは、データの変更 (INSERT、UPDATE、DELETE) のみです。スキーマの変更 (ALTER TABLE など) は別途対応する必要があります。
- レプリケーションの中断を避けるため、ソースデータベースと移行先データベース間のネットワーク接続が安定していることを確認してください。
- 移行先データベースがソースデータベースに追従できていることを確認するため、レプリケーションの遅延を監視してください。ソースデータベースで
max_slot_wal_keep_sizeに適切な値を設定すると、増大するレプリケーションスロットを管理しやすくなり、ディスク容量の過剰な消費を防げます。 - ユースケースによっては、レプリケーション処理に対する監視やアラートを設定するとよいでしょう。