publication에 테이블 추가 및 subscription 갱신(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;하는 일
publisher에서 publication에 새 테이블을 추가한다. subscriber에서 REFRESH PUBLICATION은 새 테이블을 subscription에 포함하고 copy_data = true로 초기 복사(tablesync)를 시작한다. srsubstate: i = init, d = data copy, f = copy finished, s = synchronized, r = ready.
사용 시점
실행 중인 logical replication에 새 테이블을 추가하거나 publication에서 테이블을 제거할 때.
주의
FOR ALL TABLES나 TABLES IN SCHEMA publication이라도 REFRESH를 실행하기 전에는 subscriber가 새 테이블을 인식하지 않는다. subscriber에 테이블이 없으면 REFRESH가 실패한다. DDL은 복제되지 않는다. publish된 테이블에 PRIMARY KEY나 REPLICA IDENTITY가 없으면 publisher에서 UPDATE/DELETE가 실패한다. 대형 테이블의 초기 복사는 publisher에서 slot과 스냅샷을 오랫동안 유지한다.