46.8. Поддержка синхронной репликации для логического декодирования#

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] в рамках транзакции.

Обратите внимание, что эти команды, которые могут вызвать взаимоблокировку, применяются не только к явно указанным системным каталогам выше, но и к любым другим каталогам [пользователя].