Databases for PostgreSQL フィルタ論理レプリケーション先として
IBM Cloud® Databases for PostgreSQL 論理レプリケーションでは、 行レベルのフィルタリングと 列リストのフィルタリングに基づいてパブリッシャーを作成し、サブスクライバーにレプリケートされるデータをきめ細かく制御することができます。
フィルタリングされた論理レプリケーションでは、各サブスクライバにレプリケートするパブリッシュされたテーブルとカラムを指定できるため、この機能が拡張されます。 このフィルタリングはパブリケーション・レベルで行われ、各サブスクライバーにレプリケートする必要があるデータを正確に選択することができます。 これは、セキュリティ、パフォーマンス、データ分離などの理由から、すべてのデータをすべてのノードで利用できるようにする必要がない場合に特に有効です。
前提条件
- PostgreSQL 15日以降、出版社および購読者に通知。
- 論理レプリケーションを有効にする必要がある。 詳細は 論理レプリケーションを 参照。
- レプリケーション・ユーザーには適切な権限が必要です。
論理レプリケーションで行フィルタを設定する
Databases for PostgreSQL のフィルター付きレプリケーションを持つパブリッシャーは、論理的なレプリケーションフィルターを使用して、テーブルの選択された行や列のみをサブスクライバーに発行します。
パブリッシャー機能
-
create_publisher_with_filtered_rows各データベースで、行と列のフィルタを使用して複数のパブリケーションを作成し、特定のデータ要件に基づいて、異なるサブスクライバに変更を選択的に複製できます。
Arguments: publisher_name The Unique name of publisher. for table To publish single/list of tables for all table To publish all tables, along with future tables. for all tables in schema To publish all tables in schema, along wth future tables. Usage: exampledb=>CREATE PUBLICATION my_publication; CREATE PUBLICATION exampledb=>ALTER PUBLICATION my_publication ADD TABLE department_employee WHERE (department_id = 'development'); //alternative exampledb=>CREATE PUBLICATION my_publication_development_hr FOR TABLE department_employee WHERE (department_id = 'development' or department_id='hr'); CREATE PUBLICATION -
list_publisher各データベースで実行中の出版物の数を一覧表示するか、特定のテーブルでアクティブな出版物のテーブル定義を表示できます。
Usage: exampledb=>SELECT * FROM pg_publication; oid | pubname | pubowner | puballtables | pubinsert | pubupdate | pubdelete | pubtruncate | pubviaroot -------+-------------------------------+----------+--------------+-----------+-----------+-----------+-------------+------------ 16525 | my_publication | 16421 | f | t | t | t | t | f 16527 | my_publication_development_hr | 16421 | f | t | t | t | t | f -
alter_publisher出版物の定義を変更する。
Syntax: ALTER PUBLICATION name ADD publication_object [, ...] ALTER PUBLICATION name DROP publication_object [, ...] Usage: exampledb=>ALTER PUBLICATION my_publication ADD TABLE department WHERE (dept_name = 'hr'); ALTER PUBLICATION -
drop_publisher使用していない出版物からテーブルをドロップ/削除する。
Usage: exampledb=>ALTER PUBLICATION my_publication drop table department; DROP PUBLICATION -
create_publisher_with_filtered_columnsテーブルから選択した列のみを複製する。
Usage: exampledb=>CREATE PUBLICATION employee_publication FOR TABLE employee (id, first_name, last_name); CREATE PUBLICATION // PostgreSQL >= 17, support combined filtering exampledb=>CREATE PUBLICATION employee_publication_withrows FOR TABLE employee (id, first_name, last_name) WHERE (department = 'HR'); CREATE PUBLICATION
サブスクライバーの関数
-
create_subscriptionArguments: subscription_name Unique name to create the subscription channel with host_ip Publisher hostname or public IP address port Port number publisher is running on username `admin` user created on the publisher password Password of the `admin` user on the publisher db_name The name of the database to be replicated publisher_name The name of publisher channel on the publisher Usage: exampledb=> SELECT create_subscription('subs1','130.215.223.184','5432','password','admin','exampledb','my_publication');サブスクリプション・パラメータでデフォルト設定
copy_data = true(オプション・パラメータ、 PostgreSQL 17 以降使用可能) を選択すると、パブリッシャはパブリケーションで指定された行フィルタに一致する既存データのみを転送します。 これにより、サブスクライバにレプリケートされる初期データは、指定されたフィルタリング条件に厳密に従うようになり、基準から外れたレコードが含まれることはない。