DBAtlas · Atlas de operações de banco de dados

Adicionar uma tabela a uma publication e atualizar a subscription (REFRESH PUBLICATION)

PostgreSQLReplicação 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;

O que faz

Adiciona uma nova tabela à publication no publisher; no subscriber, REFRESH PUBLICATION inclui as novas tabelas na subscription e inicia a cópia inicial (tablesync) com copy_data = true. srsubstate: i = init, d = data copy, f = copy finished, s = synchronized, r = ready.

Quando usar

Quando uma nova tabela é adicionada a uma replicação lógica em execução ou uma tabela é removida da publication.

Atenção

Mesmo com publications FOR ALL TABLES ou TABLES IN SCHEMA, o subscriber não pega uma nova tabela até que o REFRESH seja executado. O REFRESH falha se a tabela não existir no subscriber; DDL não é replicado. Se uma tabela publicada não tiver PRIMARY KEY ou REPLICA IDENTITY, UPDATE/DELETE falham no publisher. A cópia inicial de uma tabela grande segura um slot e um snapshot no publisher por muito tempo.

Abrir no DBAtlas →

Relacionados