Ответ
Логическая репликация в PostgreSQL основана на репликации изменений на уровне отдельных записей (INSERT, UPDATE, DELETE), а не на физических блоках данных. Это открывает специфические возможности.
Преимущества:
-
Гранулярный контроль: Можно реплицировать не всю базу, а конкретные таблицы или даже части таблиц (с помощью публикаций/подписок). Это снижает нагрузку на сеть и дисковое пространство на реплике.
-- На primary создаем публикацию только для нужных таблиц CREATE PUBLICATION sales_publication FOR TABLE invoices, customers WHERE (region = 'EU'); -
Обновление мажорных версий: Поскольку реплика логическая, реплика может работать на более новой мажорной версии PostgreSQL (например, primary на 14, replica на 15). Это основной метод бесшовного обновления версий.
-
Трансформация данных и мультимастер: Можно направлять данные в разные схемы или таблицы на реплике, агрегировать их. Существуют сторонние решения (например, pglogical, BDR) для построения multi-master топологий на основе логической репликации.
-
Селективная репликация для отчетов: Можно создать реплику только с подмножеством данных для аналитических запросов, разгрузив primary.
Недостатки и ограничения:
- Нет репликации DDL: Команды изменения схемы (CREATE/ALTER/DROP TABLE) не реплицируются автоматически. Их нужно применять на всех узлах согласованно, что усложняет управление.
- Большая нагрузка на CPU: Декодирование WAL в логический поток (с помощью логического декодирования, output plugin) и применение отдельных строковых операций на реплике создает большую нагрузку, чем простая пересылка бинарных WAL-файлов при физической репликации.
- Задержка (lag): При высокой частоте изменений логическая репликация может отставать сильнее, чем физическая, так как изменения применяются последовательно и могут конфликтовать.
- Требует первичных ключей: Для таблиц, участвующих в публикации UPDATE/DELETE, обязательно должен быть первичный ключ или реплика идентичности, чтобы однозначно идентифицировать изменяемую строку.
Выбор: Физическая репликация используется для high availability и disaster recovery (полная, бинарная копия). Логическая репликация — для гибких сценариев: обновление версий, консолидация данных, географическое распределение и отчетность.