【PostgreSQL 10/11】異なるメジャーバージョン間でのロジカルレプリケーションを検証してみた (その2)

こんにちは。サイオステクノロジー OSS サポート担当 Y です。

今回は先日リリースされた PostgreSQL 11 を使って、異なるメジャーバージョン (PostgreSQL 10) との間でのロジカルレプリケーションを検証してみました。(※以下の内容は CentOS 7.5/PostgreSQL 10.5/PostgreSQL 11.0 にて検証しています。)

■はじめに

昨年リリースされた PostgreSQL 10 の新機能であるロジカルレプリケーションには “異なるメジャーバージョン間でレプリケーションが可能である” というメリットがあります。

前回は PostgreSQL 10 から PostgreSQL 11 へのロジカルレプリケーションを試してみましたが、今回は逆方向である PostgreSQL 11 から PostgreSQL 10 へのロジカルレプリケーションを試してみようと思います。

■検証 (環境構築)

それではさっそく、検証してみます。

今回は以下の様な構成で、PostgreSQL 11 から PostgreSQL 10 にデータをレプリケーションします。

まず初めに、Publisher である PostgreSQL 11 にて “wal_level = logical” の設定を実施し、PostgreSQL 11 を起動します (他の設定は、基本的にデフォルト設定で動作するはずです)。また、既に PostgreSQL 11 が起動している場合は、wal_level の設定変更を反映させるために再起動が必要です。

PostgreSQL 11 を起動したら、テスト用のテーブル “fuga” を作成し、適当なデータを INSERT します。

次に Publisher として動作させるために PUBLICATION を作成します。作成した PUBLICATION に関する情報は、システムカタログの pg_publication や pg_publication_tables で確認することができます。これで PostgreSQL 11 側での設定は完了です。

次に Subscriber である PostgreSQL 10 側の構築を行います。こちらは、特にデフォルト値からの設定変更は行わずに起動します。

次に、レプリケーション対象のテーブル (Publisher である PostgreSQL 11 側で作成したテーブルと同じ定義のテーブル) を作成します。

テーブルを作成したら、Subscriber として動作させるために SUBSCRIPTION を作成します。作成した SUBSCRIPTION に関する情報は、システムカタログの pg_subscription や pg_subscription_rel で確認することができます。

SUBSCRIPTION 作成後に、Subscriber 側 (PostgreSQL 10 側) のテーブルを参照すると、Publisher 側 (PostgreSQL 11 側) のテーブルと同じ内容が INSERT されている (レプリケーションされている) ことが確認できます。

環境構築は以上ですが、特にエラー等もなく異なるメジャーバージョン間で Publisher/Subscriber を構築することができました。また、レプリケーションの情報は、以下の様に Publisher 側 (PostgreSQL 11 側) の pg_stat_replication から確認することができます。

■検証 (動作確認)

それでは、構築した環境で動作検証 (INSERT/UPDATE/DELETE) を実施してみます。

まずは、INSERT です。Publisher 側 (PostgreSQL 11 側) で “a = 100, b = Replication Test” のレコードを INSERT します。

Publisher 側 (PostgreSQL 11 側) での INSERT 後、Subscriber 側 (PostgreSQL10 側) のテーブル “fuga” を参照すると、INSERT したレコードが反映されていることが確認できます。

次に UPDATE です。Publisher 側 (PostgreSQL 11 側) で “a = 100” のレコードの b の値を “UPDATE Test” に UPDATE します。

Publisher 側 (PostgreSQL 11 側) での UPDATE 後、Subscriber 側 (PostgreSQL10 側) のテーブル “fuga” を参照すると、UPDATE した値が反映されていることが確認できます。

最後に DELETE です。Publisher 側 (PostgreSQL 11 側) で “a = 100” のレコードを DELETE します。

Publisher 側 (PostgreSQL 11 側) での DELETE 後、Subscriber 側 (PostgreSQL10 側) のテーブル “fuga” を参照すると、DELETE したレコードが Subscriber 側でも削除されていることが確認できます。

上記の様に、異なるメジャーバージョン間でのレプリケーションが実施できていることが確認できました。

■最後に

前回と今回の検証で、”10 -> 11″ / “11 -> 10” のどちらの方向であっても、異なるメジャーバージョン間でロジカルレプリケーションが実施できることを確認できました。

ロジカルレプリケーションは、PostgreSQL 10 で実装されたばかりでまだ制約等も多いのですが、今回の検証の様なメジャーバージョン間でのレプリケーションや、テーブル単位でのレプリケーションが可能であるため、様々なケースで利用することができるのではないかと思います。

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメント投稿

メールアドレスは表示されません。


*