IBM Cloud Docs
Databases for PostgreSQL フィルタ論理レプリケーション先として

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_subscription

    Arguments:
        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 以降使用可能) を選択すると、パブリッシャはパブリケーションで指定された行フィルタに一致する既存データのみを転送します。 これにより、サブスクライバにレプリケートされる初期データは、指定されたフィルタリング条件に厳密に従うようになり、基準から外れたレコードが含まれることはない。