ALTER SUBSCRIPTION

ALTER SUBSCRIPTION — изменить определение подписки


Синтаксис

ALTER SUBSCRIPTION имя CONNECTION 'строка_подключения'
ALTER SUBSCRIPTION имя SET PUBLICATION имя_публикации [, ...] [ WITH ( параметр_публикации [= значение] [, ... ] ) ]
ALTER SUBSCRIPTION имя ADD PUBLICATION имя_публикации [, ...] [ WITH ( параметр_публикации [= значение] [, ... ] ) ]
ALTER SUBSCRIPTION имя DROP PUBLICATION имя_публикации [, ...] [ WITH ( параметр_публикации [= значение] [, ... ] ) ]
ALTER SUBSCRIPTION имя REFRESH PUBLICATION [ WITH ( параметр_обновления [= значение] [, ... ] ) ]
ALTER SUBSCRIPTION имя ENABLE
ALTER SUBSCRIPTION имя DISABLE
ALTER SUBSCRIPTION имя SET ( параметр_подписки [= значение] [, ... ] )
ALTER SUBSCRIPTION имя SKIP ( параметр_пропуска = значение )
ALTER SUBSCRIPTION имя OWNER TO { новый_владелец | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
ALTER SUBSCRIPTION имя RENAME TO новое_имя

Описание

Команда ALTER SUBSCRIPTION может менять почти все свойства подписки, которые можно указать в команде CREATE SUBSCRIPTION.

Чтобы использовать команду ALTER SUBSCRIPTION, нужно быть владельцем соответствующей подписки. Чтобы переименовать подписку или сменить владельца, нужно иметь право CREATE в базе данных. Кроме того, чтобы сменить владельца, нужно иметь возможность выполнять SET ROLE для SET ROLE для новой роли- владельца. Если для подписки указано password_required=false, изменять ее могут только суперпользователи.

При обновлении публикации мы удаляем отношения, которые больше не являются частью этой публикации, а также слоты синхронизации таблиц, если таковые имеются. Эти слоты нужно удалить, чтобы освободить ресурсы, выделенные для данной подписки на удаленном хосте. Если из-за сбоя в сети или какой-либо другой ошибки QHB не может удалить эти слоты, будет выдано сообщение об ошибке. Чтобы выйти из такой ситуации, пользователь должен либо попробовать повторить эту операцию, либо отсоединить слот от подписки и удалить подписку, как описано на справочной странице команды DROP SUBSCRIPTION.

Команды ALTER SUBSCRIPTION ... REFRESH PUBLICATION и ALTER SUBSCRIPTION ... {SET|ADD|DROP} PUBLICATION ... с параметром refresh, равным true, нельзя выполнить в блоке транзакции. Кроме того, эти команды нельзя выполнить, когда у подписки включен режим двухфазной фиксации (two_phase), за исключением случая, когда параметр copy_data равен false. Чтобы узнать фактическое состояние режима двухфазной фиксации, проверьте столбец subtwophasestate каталога pg_subscription.


Параметры

имя

Имя подписки, свойства которой подлежат изменению.

CONNECTION 'строка_подключения'

Это предложение изменяет свойство соединения, первоначально заданное командой CREATE SUBSCRIPTION. Дополнительную информацию см. на справочной странице этой команды.

SET PUBLICATION имя_публикации
ADD PUBLICATION имя_публикации
DROP PUBLICATION имя_публикации

Эти формы изменяют список публикаций, на которые оформлена подписка. SET заменяет весь список публикаций на новый, ADD добавляет в него новые публикации, а DROP удаляет из него публикации. Дополнительную информацию см. на справочной странице команды CREATE SUBSCRIPTION. По умолчанию эта команда также будет действовать как REFRESH PUBLICATION.
В указании параметр_публикации задаются дополнительные параметры для этой операции. Поддерживаемые параметры:

  • refresh (boolean)
    При значении false команда не будет пытаться обновить информацию о таблицах. После этого REFRESH PUBLICATION следует выполнять отдельно. Значение по умолчанию равно true.
    Кроме того, здесь можно задавать параметры обновления, перечисленные в описании REFRESH PUBLICATION, чтобы управлять неявной операцией обновления.

REFRESH PUBLICATION

Считывает недостающую информацию о таблицах с публикатора. Это приводит к запуску репликации таблиц, добавленных в публикации, на которые оформлена подписка, после последнего вызова REFRESH PUBLICATION или CREATE SUBSCRIPTION.
В указании параметр_обновления задаются дополнительные параметры для операции обновления. Поддерживаемые параметры:

  • copy_data (boolean)
    Указывает, следует ли копировать уже существующие данные в публикациях, на которые оформляется подписка, после запуска репликации. Значение по умолчанию равно true.
    Таблицы, на которые уже оформлена подписка, не копируются, даже если предложение WHERE фильтра строк таблицы с тех пор изменилось.
    Подробную информацию о том, как copy_data = true может взаимодействовать с параметром origin, см. в Примечаниях.
    Подробную информацию о копировании уже существующих данных в двоичном формате см. в описании параметра binary команды CREATE SUBSCRIPTION.

ENABLE

Включает ранее выключенную подписку, запуская рабочий процесс логической репликации в конце транзакции.

DISABLE

Выключает запущенную подписку, останавливая рабочий процесс логической репликации в конце транзакции.

SET ( параметр_подписки [= значение] [, ... ] )

Это предложение изменяет параметры, первоначально заданные с помощью команды CREATE SUBSCRIPTION. Дополнительную информацию см. на справочной странице этой команды. Параметры, которые можно изменить: slot_name, synchronous_commit, binary, streaming, disable_on_error, password_required, run_as_owner и origin. Только суперпользователь может задать password_required = false.

SKIP ( параметр_пропуска = значение )

Пропускает применение всех изменений удаленной транзакции. Если входящие данные нарушают какие-либо ограничения, логическая репликация встанет на паузу, пока конфликт не будет разрешен. При выполнении команды ALTER SUBSCRIPTION ... SKIP рабочий процесс логической репликации пропускает в транзакции все изменения, связанные с модификацией данных. Этот параметр не влияет на транзакции, которые уже подготовлены на стороне подписчика в режиме two_phase. После того, как рабочий процесс логической репликации успешно пропускает или завершает транзакцию, номер LSN (хранящийся в столбце pg_subscription.subskiplsn) очищается. Подробную информацию о конфликтах логической репликации см. в разделе Конфликты.
В указании параметр_пропуска задаются параметры для этой операции. Поддерживаемый параметр:

  • lsn (pg_lsn)
    Задает LSN завершения удаленной транзакции, изменения которой должны быть пропущены рабочим процессом логической репликации. LSN завершения — это LSN, с которым транзакция зафиксирована или подготовлена. Пропуск отдельный субтранзакций не поддерживается. Значение NONE сбрасывает заданный ранее LSN.

новый_владелец

Имя пользователя, который станет новым владельцем подписки.

новое_имя

Новое имя для подписки.

При указании параметра типа boolean часть = значение можно опустить, что равнозначно указанию значения TRUE.


Примеры

Смена публикации, на которую подписана подписка, на insert_only:

ALTER SUBSCRIPTION mysub SET PUBLICATION insert_only;

Выключение (остановка) подписки:

ALTER SUBSCRIPTION mysub DISABLE;

Совместимость

Команда ALTER SUBSCRIPTION является расширением QHB.


См. также

CREATE SUBSCRIPTION, DROP SUBSCRIPTION, CREATE PUBLICATION, ALTER PUBLICATION