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

5.4.2 個別ノードに対するDDL文の実行

定義情報を操作したい中央管理ノード、または、データノードで実行してください。

中央管理ノードからデータノードに対してのDDL文の実行は、例えば、以下のように実行します。以下のようにデータノードに対してDDL文を実行した場合、DDL文がそのままデータノードに送信され、中央管理ノード上ではDDL文は実行されません。

例1:中央管理ノード上から、データノードdn1に対するオブジェクトの定義
(中央管理ノードに接続)
SET pgx_ddl_target_node = 'dn1';
CREATE ROLE role_dn1; //データノードdn1のみに対して実行される。

例2:中央管理ノード上から、データノードdn1に対するオブジェクトの変更
(中央管理ノードに接続)
SET pgx_ddl_target_node = 'dn1';
ALTER ROLE role_dn1; //データノードdn1のみに対して実行される。

例3:中央管理ノード上から、データノードdn1に対するオブジェクトの削除
(中央管理ノードに接続)
SET pgx_ddl_target_node = 'dn1';
DROP ROLE role_dn1; //データノードdn1のみに対して実行される。

データノードに対して定義したオブジェクトについて、中央管理ノード上や全ノードに対して実行した場合、エラーとなるか、意図しない動作となります。

例1:データノードdn1に対するオブジェクトに対し、dn1以外のノードに対して操作
(中央管理ノードに接続)
SET pgx_ddl_target_node = 'dn1';
CREATE ROLE role_dn1; //データノードdn1のみに対して実行される。
SET pgx_ddl_target_node = '(dn1以外)';
ALTER ROLE role_dn1; //データノードdn1以外にrole_dn1は存在しない、もしくは、意図しない情報として定義されているため、実行エラー、または、意図しない動作となる。

中央管理ノードに対するDDL文の実行

中央管理ノード上でDDL文を実行してください。

オブジェクトを定義するコマンドでは、pgx_ddl_target_nodeを空、または'COORDINATOR'に設定してください。

中央管理ノード上のみに定義されたオブジェクトを操作する場合、中央管理ノード上のみで操作が実行されます。全ノードに対して定義されたオブジェクトに対して、中央管理ノード上のみでコマンドを実行したい場合、pgx_ddl_target_nodeを'COORDINATOR'に設定してください。

例えば、以下のように実行します。

例1:
SET pgx_ddl_target_node = ''; //または、SET pgx_ddl_target_node = 'COORDINATOR';
CREATE ROLE role_coord; //中央管理ノードのみに対してCREATE ROLEが実行される。

例2:
SET pgx_ddl_target_node = 'COORDINATOR';
ALTER ROLE role_sc LOGIN; //role_scが全ノード対象のオブジェクトである場合でも、pgx_ddl_target_node = 'COORDINATOR'のため、中央管理ノードのみに対して実行される。

例3:
SET pgx_ddl_target_node = 'COORDINATOR';
DROP ROLE role_sc; //role_scが全ノード対象のオブジェクトである場合でも、pgx_ddl_target_node = 'COORDINATOR'のため、中央管理ノードのみに対して実行される。
全ノード対象のオブジェクトの、中央管理ノード上のみでの操作について

全ノード対象のオブジェクトについて、中央管理ノード上のみで操作することは可能ですが、基本的には行うことは想定していません。例えば、全ノード対象のオブジェクトの定義情報を中央管理ノードのみで変更した場合に、そのオブジェクトに関連する全ノードに対する処理の実行時にエラーが発生するといった可能性があるため、注意してください。

利用シーンは限られますが、中央管理ノード上のみで操作するケースとして、例えば、以下が考えられます。

  • レプリケーションテーブルのインデックスについて、中央管理ノード上のインデックスのみが肥大化した場合

    中央管理ノード上のインデックスのみが肥大化してしまうケースがあった場合に、他データノード上の業務に影響を与えず、中央管理ノード上のインデックスのみをREINDEXを実行する。

  • レプリケーションテーブルについて、中央管理ノード上のテーブルのみが肥大化した場合
    (レプリケーションテーブルに多量にINSERTした後にROLLBACKした場合など)

    中央管理ノード上のレプリケーションテーブルのみについてVACUUMを実行する。

データノードに対するDDL文の実行

中央管理ノード、またはデータノード上でDDL文を実行してください。

中央管理ノード上から実行する場合、pgx_ddl_target_node = 'データノード名' と設定して実行してください。

例えば、以下のように実行します。

SET pgx_ddl_target_node = 'datanode1';
CREATE ROLE role_sc; //datanode1に対してCREATE ROLEを実行