18
Конфликты
Приводят к ошибке
нарушение ограничений целостности,
недостаточные права на целевую таблицу или политика защиты строк
репликация выдает ошибку,
подписка с параметром disable_on_error отключается
можно вручную исправить данные на стороне подписки
или пропустить конфликтующую транзакцию
Игнорируются
обновляемая или удаляемая строка отсутствует на подписчике
репликация продолжается, но согласованность может быть нарушена
Поскольку таблицы на публикующем сервере и на подписчике могут
изменяться независимо друг от друга, при выполнении операции,
поступившей от подписки, возможен конфликт с существующими
данными.
Часто конфликтом называют ситуацию, когда операция не может быть
выполнена, обычно из-за нарушения ограничения целостности, или
отсутствия прав у владельца подписки на целевую таблицу, или
ограничений на уровне строк (RLS, row level security).
В этом случае применение операции завершается ошибкой. Подписчик
периодически повторяет попытки, но до разрешения конфликта они
будут неудачными. Конфликты можно разрешать только вручную,
автоматическое разрешение пока не реализовано. Есть два варианта:
исправить данные на подписчике или пропустить конфликтующую
транзакцию. Во втором случае нужно отключить репликацию, вызвать
функцию pg_replication_origin_advance или выполнить команду ALTER
SUBSCRIPTION ... SKIP ..., и снова включить репликацию. Можно также
заранее настроить автоматическое отключение репликации, указав
параметр подписки disable_on_error.
Если строка, которую необходимо изменить или удалить, отсутствует на
подписчике, операция не будет выполнена. В этом случае ошибка не
возникает, но такие игнорируемые конфликты говорят о том, что
согласованность данных между публикующим сервером и подписчиком
нарушена.