Логическая репликация начинается с копирования моментального снимка данных из базы данных издателя. По завершении этого этапа изменения на издателе передаются подписчику в режиме реального времени по мере их возникновения. Подписчик применяет данные в том же порядке, в котором фиксировались транзакции на издателе, что гарантирует согласованность транзакций для публикаций в рамках любой отдельной подписки.
Логическая репликация построена на архитектуре, аналогичной физической потоковой репликации (см. Раздел 3.11.2.5). Она
реализуется с помощью walsender и apply
процессов. Процесс walsender запускает логическое декодирование (описанное
в Глава 5.12) журнала WAL и загружает стандартный
плагин вывода логического декодирования (pgoutput). Данный плагин
преобразует изменения, считанные
из WAL, в формат протокола логической репликации
(см. Раздел 7.4.5) и фильтрует данные в соответствии со спецификацией публикации. Затем данные непрерывно передаются по протоколу потоковой репликации рабочему процессу apply, который сопоставляет данные с локальными таблицами и применяет отдельные изменения в порядке их получения с соблюдением согласованности транзакций.
Процесс применения в базе данных подписчика всегда запускается с параметром
session_replication_role
установленным в значение replica. Это означает, что по умолчанию триггеры и правила на стороне подписчика не срабатывают. Пользователи могут дополнительно включить триггеры и правила для таблицы, используя
ALTER TABLE команду
и ENABLE TRIGGER и ENABLE RULE
предложения.
Процесс применения логической репликации в настоящее время вызывает только триггеры уровня строк,
а не триггеры уровня операторов. Однако начальная синхронизация таблицы реализована подобно команде COPY и, следовательно, вызывает триггеры как уровня строк, так и уровня операторов для INSERT.
Начальные данные в существующих таблицах, на которые оформлена подписка, фиксируются в виде снимка и копируются в параллельном экземпляре специального типа процесса применения. Данный процесс создает собственный слот репликации и копирует существующие данные. Как только копирование завершается, содержимое таблицы становится видимым для других фоновых процессов. После копирования существующих данных рабочий процесс переходит в режим синхронизации, который обеспечивает приведение таблицы в согласованное состояние с основным процессом применения путем потоковой передачи любых изменений, произошедших во время начального копирования данных с использованием стандартной логической репликации. В ходе фазы синхронизации изменения применяются и фиксируются в том же порядке, в котором они выполнялись на издателе. По завершении синхронизации управление репликацией таблицы возвращается основному процессу применения, после чего репликация продолжается в штатном режиме.
Публикация
«публикация»
параметр определяет только то, какие операции DML будут реплицироваться. При начальной синхронизации данных этот параметр не учитывается во время копирования существующего содержимого таблиц.