レプリケーションテーブルの復旧手順を説明します。
中央管理ノードでのレプリケーションオブジェクトの削除
スーパーユーザーで中央管理ノードにログインし、以下の手順でpgx_replication_objectに登録済みのレプリケーションオブジェクトをすべて削除します。
-- レプリケーションオブジェクトを削除するために、非同期レプリケーションに変更
ALTER SYSTEM SET synchronous_standby_names = '';
ALTER SYSTEM
SELECT pg_reload_conf();
pg_reload_conf
----------------
t
(1 行)
-- レプリケーションオブジェクトの削除
SELECT pgx_drop_replication_object('datanode1');
NOTICE: replication object: replication slot "db5_node16394" does not exist, skipping
pgx_drop_replication_object
-----------------------------
t
(1 行)
SELECT pgx_drop_replication_object('datanode2');
...replicatedテーブルの初期化
originalテーブルのデータをreplicatedテーブルに同期させるため、TRUNCATE文を実行してreplicatedテーブルを初期化します。誤ってテーブルを初期化してしまった場合に備えてバックアップの取得を推奨します。
レプリケーションオブジェクトの再作成とレプリケーションテーブルの登録
pgx_create_replication_object()を使用して新たにレプリケーションオブジェクトを作成します。また、pgx_attach_replication_table()を使用してoriginalテーブルをレプリケーション対象として追加し、originalテーブルのデータをreplicatedテーブルに同期します。
postgres=# SELECT pgx_create_replication_object();
pgx_create_replication_object
-------------------------------
t
(1 行)
postgres=# CALL pgx_attach_replication_table('public', 'x', 'datanode1');
CALL
postgres=# SELECT relid::regclass FROM pgx_replication_table;
relid
------
x