PostgreSQlのロジカルレプリケーションは、ALTER PUBLICATION
/ ALTER SUBSCRIPTION
を利用して、運用開始後にテーブル追加などの変更を行えます。
(セットアップ手順については、
PostgreSQL論理レプリケーション設定で解説しています)
Publication, Subscriptionの確認
作成済のPublication、Subscriptionの情報は、対象のクラスタに接続したうえで、
SELECT * FROM pg_publication;
SELECT * FROM pg_subscription;
によって確認できます。
また、Publicationの配信対象テーブルは、
SELECT * FROM pg_publication_tables;
で表示できます。
既存のレプリケーションにテーブルを追加する
受信側にテーブルを追加作成
レプリケーションを受信してINSERTするテーブルを作成しておきます。スキーマはPublication側の定義のデッドコピー、または流用して編集したものになるでしょう。
また、レプリケーションの接続ユーザーに
GRANT SELECT ON categories TO rep_user;
のように配信テーブルへのアクセス権を付与しておきます。
Publicationにテーブル追加
ALTER PUBLICATION origindb_pub ADD TABLE categories;
で、既存のPublicationに配信対象のテーブルを追加できます。
Subscriptionリフレッシュ
受信側のデータベースに接続したうえで、
ALTER SUBSCRIPTION origin_sub1 REFRESH PUBLICATION;
すると、Publication側の設定を取得して追加したテーブルのレプリケーションが開始します。
Subscription側は設定済の接続情報で動作するため、REFRESHするだけです。
更新開始しない場合
SELECT * FROM pg_publication_tables;
や
SELECT * FROM pg_subscription_rel;
などで、追加したテーブルに対応する行が存在するか確認します。
また、配信テーブルのアクセス権がない場合には、ERROR: permission denied for relation
といったエラーログが出力されます。この場合は権限追加するとリトライ時に転送が始まります。
Subscription削除
Subscriptionの削除は以下のようにDROPで実行できます。subscriptionを作成したDBに接続した状態で実行する必要があります。
DROP SUBSCRIPTION origin_sub1;
同様に、publicationも転送元DBに接続してDROP PUBLICATION
で実行可能です。
Chuma Takahiro