パブリケーションに表を追加し、サブスクリプションをリフレッシュ(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が失敗する。大きな表の初期コピーは、パブリッシャ上でスロットとスナップショットを長時間保持する。