論理レプリケーションの使い方

表ごとに、変更を別のサーバーへ写す

書き方

ALTER SYSTEM SET wal_level = logical;(再起動が要る)
CREATE PUBLICATION 名前 FOR TABLE 表;
CREATE SUBSCRIPTION 名前 CONNECTION 'host=… dbname=… user=… password=…' PUBLICATION 名前;(受け取る側)
ALTER SUBSCRIPTION 名前 REFRESH PUBLICATION;
SELECT * FROM pg_stat_subscription;

発行する側で PUBLICATION を作り、受け取る側で SUBSCRIPTION を作ると、まず表の中身を写し、そのあとは INSERT・UPDATE・DELETE を行ごとに送ります。受け取る側には同じ名前の表を先に作っておきます(定義は写りません)。UPDATE・DELETE を送るには主キー(REPLICA IDENTITY)が要ります。受け取る側で行がぶつかると、エラーで止まり、ログに出ます。

例

CREATE PUBLICATION shop_pub FOR TABLE orders;
\! psql -p 5434 -c "SELECT subname, received_lsn FROM pg_stat_subscription"

実際に打って練習する

PostgreSQL DBA コースの Lv61「論理レプリケーション」で覚えます。ブラウザの中のシミュレーターで、本物と同じように打って確かめられます。

すべてのレベルが、プラチナ以上のプランで遊べます。

PostgreSQL の管理コマンド一覧(DBA)へ戻る