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

A.6 CREATE REPLICATION TABLE -- 新しいレプリケーションテーブルを定義する

概要

CREATE REPLICATION TABLE table_name [既存のCREATE TABLEのオプション]

説明

レプリケーションテーブルは、CREATE REPLICATION TABLE文を使用し、中央管理ノードで作成します。

レプリケーションテーブルは、論理レプリケーションを利用し、中央管理ノード上の複製元を各データノード上に複製することでデータの共有を実現しています。そのため、あらかじめ論理レプリケーションを使用できるようにパラメータを設定しておく必要があります。

また、レプリケーションに必要となるレプリケーションオブジェクトを、pgx_create_replication_object()を使用し、あらかじめ全データノードに作成しておく必要があります。

1つでもレプリケーションオブジェクトが定義されていないデータノードが存在する場合は、以下のメッセージが出力され、エラーとなります。

ERROR: レプリケーションオブジェクトは全てのデータノードに存在している必要があります。

CREATE REPLICATION TABLE文は中央管理ノードでのみ実行可能です。

pgx_ddl_target_nodeパラメータが空、または、'COORDINATOR'に設定されている場合でも、'ALLNODES'に設定されている場合と同様に、全ノードにテーブルを定義します。

また、定義されたテーブルは全ノードに対するオブジェクトとして登録されます。

pgx_ddl_target_nodeパラメータがデータノード名に設定されている場合は、以下のメッセージが出力され、エラーとなります。

ERROR: CREATE REPLICATION TABLEは中央管理ノードで実行する必要があります。

中央管理ノードに複製元となるoriginalテーブル、データノードに複製先となるreplicatedテーブルが定義されます。これらは同名のデータベースに定義されるため、あらかじめ中央管理ノード上のデータベースと同名のデータベースを全データノードに定義しておく必要があります。

CREATE REPLICATION TABLE文は、一般ユーザーでも実行可能ですが、以下を満たしている必要があります。

pgx_add_to_replication_object()は、CREATE REPLICATION TABLE文の実行中に内部的に実行される関数です。処理をスーパーユーザーの権限を用いて実行します。

レプリケーションテーブルの定義が完了したら実行権限は取り消しても構いません。

中央管理ノード、またはデータノードに、すでにtable_nameと同名のテーブルが存在していた場合は、以下のメッセージが出力され、エラーとなります。

ERROR: リレーション"table_name"はすでに存在します (10874)

CREATE REPLICATION TABLE文以外で定義したテーブルをレプリケーションテーブルに変更することはできません。そのテーブルのデータを持つレプリケーションテーブルを作成したい場合は、新たにCREATE REPLICATION TABLE文でレプリケーションテーブルを定義してから、originalテーブルに対象のテーブルのデータをコピーしてください。

コマンドの実行が成功しているかどうかは、以下を確認してください。

1) システムカタログpgx_replication_tableとpgx_replication_table_nodeに、レプリケーションテーブルの情報が格納されていること

2) originalテーブルをINSERT文などで更新し、replicatedテーブルにも更新が反映されること

いずれかが確認できなかった場合は、一度DROP TABLE文で削除してからエラーを解消し、再度CREATE REPLICATION TABLE文を実行してください。

CREATE REPLICATION TABLE文は、トランザクションブロック内で実行することはできません。

パラメータ

既存のCREATE TABLE文のパラメータのうち、以下のパラメータはCREATE TABLE文と動作が異なります。