46.8. Поддержка синхронной репликации для логического декодирования#
46.8. Поддержка синхронной репликации для логического декодирования #
46.8.1. Обзор #
Логическое декодирование может использоваться для создания решений синхронной репликации с тем же пользовательским интерфейсом, что и для потоковой репликации. Для этого необходимо использовать интерфейс потоковой репликации (см. Раздел 46.3), чтобы передавать данные. Клиенты должны отправлять сообщения Standby status update (F)
(см. Раздел 52.4), так же как и клиенты потоковой репликации.
Примечание
Все синхронные реплики, получающие изменения с помощью логического декодирования, будут работать в рамках одной базы данных. Поскольку, в отличие от этого, параметр synchronous_standby_names
в настоящее время является глобальным для сервера, это означает, что эта техника не будет работать должным образом, если активно используется более одной базы данных.
46.8.2. Ограничения в использовании #
В настройке синхронной репликации может возникнуть блокировка, если транзакция заблокировала каталоговые таблицы [user] исключительно. См. Раздел 46.6.2 для получения информации о каталоговых таблицах пользователя. Это происходит потому, что логическое декодирование транзакций может блокировать каталоговые таблицы для доступа к ним. Чтобы избежать этого, пользователи должны воздержаться от получения исключительной блокировки на каталоговые таблицы [user]. Это может произойти следующими способами:
Выполнение явной команды
LOCK
наpg_class
в рамках транзакции.Выполните
CLUSTER
наpg_class
в рамках транзакции.PREPARE TRANSACTION
после командыLOCK
наpg_class
и разрешить логическое декодирование двухфазных транзакций.PREPARE TRANSACTION
послеCLUSTER
команды наpg_trigger
и позволяет логическое декодирование двухфазных транзакций. Это приведет к взаимоблокировке только в случае, если у опубликованной таблицы есть триггер.Выполнение команды
TRUNCATE
на таблице каталога [user] в рамках транзакции.
Обратите внимание, что эти команды, которые могут вызвать взаимоблокировку, применяются не только к явно указанным системным каталогам выше, но и к любым другим каталогам [пользователя].