ページの先頭行へ戻る
Enterprise Postgres 14 SP1 スケールアウト運用ガイド
FUJITSU Software

5.2 レプリケーションテーブル

レプリケーションテーブルは、すべてのデータノードで複製される表のことで、データノード間で共通のデータが複製されます。データノード間で参照する共通なデータをレプリケーションテーブルとして定義することで、共通なデータを扱いたい場合でもシャードに閉じた業務を実現できます。

レプリケーションテーブルは、以下の2種類のテーブルによって構成されます。

レプリケーションテーブルは、全ノードに対するオブジェクトとして登録されます。

レプリケーションテーブルの更新は、originalテーブルに対してのみ可能です。replicatedテーブルを直接更新することはできません。

レプリケーションテーブルを利用するためには、レプリケーションオブジェクトを定義する必要があります。レプリケーションオブジェクトとは、originalテーブルとreplicatedテーブルとの間の論理レプリケーションを実行するためのオブジェクトです。レプリケーションオブジェクトは以下の3種類のオブジェクトによって構成されます。

パブリケーションとレプリケーションスロットは中央管理ノードに、サブスクリプションはデータノードに定義されます。それぞれデータベース単位で定義することができます。

パブリケーションとレプリケーションスロットに関しては、データノードの数だけ定義され、それぞれ特定のデータノードと通信することでレプリケーションを実行します。それにより、特定のデータノードに対してのみレプリケーションを停止するなど、シーンに合わせて利用することができます。

レプリケーションテーブルは、同期・非同期レプリケーションの両方に対応しているので、業務に応じてどちらかを選択してください。設定方法は、“5.2.4 レプリケーションテーブルの同期方法”を参照してください。デフォルトでは非同期レプリケーションが設定されます。

以下にレプリケーションテーブルの利用イメージを示します。

オブジェクト

操作に利用するSQL、関数

original table, replicated table

CREATE REPLICATION TABLE, ALTER REPLICATION TABLE

pgx_add_replication_object(内部的に呼び出される)

pgx_attach_replication_table, pgx_detach_replication_table

レプリケーションオブジェクト

pgx_create_replication_object, pgx_alter_replication_object

pgx_drop_replication_object


以下にレプリケーションテーブルの基本的な利用例を示します。赤枠の操作はスーパーユーザーが実行する必要があります。

また、以下は、各ノードでユーザーマッピングしているすべてのユーザー名が同一である場合の例です。各ノードにマッピングされているユーザー名が異なる場合は、各ノードにマッピングされているユーザーに権限を与える、または権限を取り消す必要があります。

レプリケーションテーブルの定義


レプリケーションテーブルの同期方法の変更


レプリケーションテーブルの削除

レプリケーションテーブルが存在するデータベースをテンプレートとしてデータベースを作成する場合やレプリケーションテーブルが存在するデータベースを削除したい場合は、事前に対応するレプリケーションオブジェクトやレプリケーションテーブルを削除してください。論理レプリケーションの接続が存在する場合には上記の処理を実行することができないためです。