category

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

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といったエラーログが出力されます。この場合は権限追加するとリトライ時に転送が始まります。