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] в рамках транзакции.
Обратите внимание, что эти команды, которые могут вызвать взаимоблокировку, применяются не только к явно указанным системным каталогам выше, но и к любым другим каталогам [пользователя].