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 включает новые таблицы в подписку и запускает начальное копирование (tablesync) с copy_data = true. srsubstate: i = init, d = копирование данных, f = копирование завершено, s = синхронизировано, r = ready.

Когда использовать

Когда в работающую логическую репликацию добавляется новая таблица или таблица удаляется из публикации.

Внимание

Даже с публикациями FOR ALL TABLES или TABLES IN SCHEMA подписчик не подхватывает новую таблицу, пока не выполнен REFRESH. REFRESH завершается ошибкой, если таблицы нет на подписчике; DDL не реплицируется. Если у опубликованной таблицы нет PRIMARY KEY или REPLICA IDENTITY, UPDATE/DELETE на издателе завершаются ошибкой. Начальное копирование большой таблицы надолго удерживает слот и снимок на издателе.

Открыть в DBAtlas →

Связанные материалы