論理レプリケーションの設定確認・テーブル追加

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