レプリケーションオブジェクトの削除
レプリケーションオブジェクトは、中央管理ノードで関数pgx_drop_replication_object()を実行することで削除できます。この関数はスーパーユーザーのみ実行可能です。
パブリケーションにoriginalテーブルが1つでも追加されている場合はエラーになります。DROP TABLE文またはpgx_detach_replication_table()によってパブリケーションからテーブルを削除してから実行してください。
originalテーブル、replicatedテーブルの削除
originalテーブル、replicatedテーブルは、DROP TABLE文で削除できます。
全ノードに対するオブジェクトであるため、パラメータpgx_ddl_target_node を空、または、'ALLNODES'に設定した状態で、中央管理ノードで実行すると全ノードでテーブルが削除されます。
パラメータpgx_ddl_target_node を'COORDINAOTR'、または、データノード名に設定した状態で実行すると、レプリケーションが継続できなくなりますので、基本的には全ノードで削除するように実行してください。
以下にレプリケーションテーブルの削除例を示します。
データベースdb1でレプリケーションテーブルtbl1とレプリケーションオブジェクトを削除したい場合
-中央管理ノードにおいて、tbl1の所有者で実行
db1=> SET pgx_ddl_target_node = 'ALLNODES';
SET
db1=> DROP TABLE tbl1;
DROP TABLE
db1=> RESET pgx_ddl_target_node;
RESET
-同期レプリケーションを設定している場合、中央管理ノードにおいて、レプリケーションオブジェクトを非同期レプリケーションに設定
postgresql.confでパラメータを設定
synchronous_standby_names = ’FIRST 1 (coordinator_standby)'
パラメータ変更を反映
$ pg_ctl reload
-中央管理ノードにおいて、スーパーユーザーで実行
db1=# SELECT pgx_drop_replication_object();
pgx_drop_replication_object
-------------------------------
t
(1 row)レプリケーションオブジェクトを非同期レプリケーションに設定せずにpgx_drop_replication_object()を実行すると、コミット処理が完了しなくなるために削除処理が終了しなくなります。pgx_drop_replication_object()の実行が終了しないときに、削除対象となるレプリケーションオブジェクトが同期レプリケーションに設定されていれば、上記が原因であると判断できます。そのときには、削除例のようにレプリケーションオブジェクトを非同期レプリケーションに設定することで解決できます。同期方法の詳細は、“5.2.4 レプリケーションテーブルの同期方法”を参照してください。
pgx_drop_replication_object()の詳細は、“付録B システム管理関数/プロシージャ”を参照してください。