DBAtlas · Atlas de operaciones de bases de datos

Añadir una tabla a una publicación y refrescar la suscripción (REFRESH PUBLICATION)

PostgreSQLReplicación lógica

Comando

-- 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;

Qué hace

Añade una tabla nueva a la publicación en el publicador; en el suscriptor, REFRESH PUBLICATION incluye las tablas nuevas en la suscripción e inicia la copia inicial (tablesync) con copy_data = true. srsubstate: i = init, d = data copy, f = copy finished, s = synchronized, r = ready.

Cuándo usarlo

Cuando se añade una tabla nueva a una replicación lógica en marcha, o se quita una tabla de la publicación.

Precaución

Incluso con publicaciones FOR ALL TABLES o TABLES IN SCHEMA, el suscriptor no incorpora una tabla nueva hasta que se ejecuta REFRESH. REFRESH falla si la tabla no existe en el suscriptor; el DDL no se replica. Si una tabla publicada no tiene PRIMARY KEY ni REPLICA IDENTITY, UPDATE/DELETE fallan en el publicador. La copia inicial de una tabla grande retiene un slot y un snapshot en el publicador durante mucho tiempo.

Abrir en DBAtlas →

Relacionado