DBAtlas · データベース運用アトラス

パブリケーションに表を追加し、サブスクリプションをリフレッシュ(REFRESH PUBLICATION)

PostgreSQL論理レプリケーション

コマンド

-- Publisher:
ALTER PUBLICATION pub_app ADD TABLE orders;
-- PG15+: all tables in a schema: ALTER PUBLICATION pub_app ADD TABLES IN SCHEMA app_schema;
SELECT pubname, schemaname, tablename FROM pg_publication_tables WHERE pubname = 'pub_app';
-- Subscriber (the table structure must already exist):
ALTER SUBSCRIPTION sub_app REFRESH PUBLICATION WITH (copy_data = true);
SELECT srrelid::regclass AS table_name, srsubstate FROM pg_subscription_rel ORDER BY 1;

概要

パブリッシャでパブリケーションに新しい表を追加する。サブスクライバでは、REFRESH PUBLICATIONが新しい表をサブスクリプションに含め、copy_data = trueで初期コピー(tablesync)を開始する。srsubstate: i = init、d = データコピー、f = コピー完了、s = 同期済み、r = ready。

使用する場面

稼働中の論理レプリケーションに新しい表を追加するとき、またはパブリケーションから表を削除するときに。

注意

FOR ALL TABLESやTABLES IN SCHEMAのパブリケーションでも、REFRESHを実行するまでサブスクライバは新しい表を取り込まない。サブスクライバに表が存在しない場合REFRESHは失敗する。DDLはレプリケートされない。パブリッシュされた表にPRIMARY KEYまたはREPLICA IDENTITYがない場合、パブリッシャでUPDATE/DELETEが失敗する。大きな表の初期コピーは、パブリッシャ上でスロットとスナップショットを長時間保持する。

DBAtlas で開く →

関連項目