Перейти к основному содержимому

ALTER SUBSCRIPTION

примечание

Эта страница переведена при помощи нейросети GigaChat.

ALTER SUBSCRIPTION - изменение определения подписки.

Синтаксис

ALTER SUBSCRIPTION name CONNECTION 'conninfo'
ALTER SUBSCRIPTION name SET PUBLICATION publication_name [, ...] [ WITH ( publication_option [= value] [, ... ] ) ]
ALTER SUBSCRIPTION name ADD PUBLICATION publication_name [, ...] [ WITH ( publication_option [= value] [, ... ] ) ]
ALTER SUBSCRIPTION name DROP PUBLICATION publication_name [, ...] [ WITH ( publication_option [= value] [, ... ] ) ]
ALTER SUBSCRIPTION name REFRESH PUBLICATION [ WITH ( refresh_option [= value] [, ... ] ) ]
ALTER SUBSCRIPTION name ENABLE
ALTER SUBSCRIPTION name DISABLE
ALTER SUBSCRIPTION name SET ( subscription_parameter [= value] [, ... ] )
ALTER SUBSCRIPTION name SKIP ( skip_option = value )
ALTER SUBSCRIPTION name OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
ALTER SUBSCRIPTION name RENAME TO new_name

Описание

ALTER SUBSCRIPTION позволяет изменить большинство свойств подписки, которые могут быть указаны в CREATE SUBSCRIPTION.

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

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

Команды ALTER SUBSCRIPTION ... REFRESH PUBLICATION, ALTER SUBSCRIPTION ... {SET|ADD|DROP} PUBLICATION ... с опцией refresh как true и ALTER SUBSCRIPTION ... SET (failover = true|false) нельзя выполнять внутри блока транзакций.

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

Параметры

name
Задает имя подписки, свойства которой должны быть изменены.
CONNECTION conninfo
Заменяет строку подключения, указанную при создании подписки. Подробнее смотрите в описании CREATE SUBSCRIPTION.
SET PUBLICATION publication_name
ADD PUBLICATION publication_name
DROP PUBLICATION publication_name
Изменяют список публикаций, на которые оформлена подписка. SET заменяет весь список, ADD добавляет публикации, DROP удаляет их. Допускается указание несуществующих публикаций в ADD и SET, чтобы их можно было создать позже. Подробнее смотрите в описании CREATE SUBSCRIPTION. По умолчанию команда также выполняет REFRESH PUBLICATION.

В указании publication_option задаются дополнительные параметры операции. Поддерживается:

refresh (boolean) : Если значение false, команда не будет обновлять информацию о таблицах. В этом случае REFRESH PUBLICATION необходимо выполнить отдельно. По умолчанию — true.

Кроме того, здесь могут задаваться параметры, относящиеся к REFRESH PUBLICATION и управляющие неявной операцией обновления.

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

В указании refresh_option задаются дополнительные свойства операции обновления. Поддерживаются следующие параметры:

copy_data (boolean) : Указывает, нужно ли копировать уже существующие данные из публикаций при старте репликации. По умолчанию — true.

Таблицы, на которые уже была оформлена подписка, не копируются, даже если изменилось условие фильтрации строк WHERE.

См. раздел «Примечания» для подробностей о том, как copy_data = true может взаимодействовать с параметром origin.

См. параметр binary команды CREATE SUBSCRIPTION для получения сведений о копировании существующих данных в двоичном формате.

ENABLE
Включает ранее отключенную подписку, запуская рабочий процесс логической репликации по завершении транзакции.
DISABLE
Отключает работающую подписку, останавливая рабочий процесс логической репликации по завершении транзакции.
SET ( subscription_parameter [= value] [, ... ] )
Этот пункт изменяет параметры, первоначально установленные командой CREATE SUBSCRIPTION. За подробностями обратитесь к ее описанию. Параметры, которые могут быть изменены, это slot_name, synchronous_commit, binary, streaming, disable_on_error, password_required, run_as_owner, origin и failover. Только суперпользователь может установить параметр password_required = false.

При изменении параметра slot_name значения свойств failover и two_phase указанного слота могут отличаться от соответствующих параметров подписки failover и two_phase. При создании слота убедитесь, что свойства слота failover и two_phase соответствуют соответствующим параметрам подписки. В противном случае слот на издателях может вести себя иначе, чем указано этими параметрами подписки. Например, слот на издателе может синхронизироваться резервными серверами даже при отключенной опции подписки failover или может быть отключен для синхронизации, несмотря на включение опции подписки failover.

SKIP ( skip_option = value )
Позволяет пропустить применение всех изменений удаленной транзакции. Если входящие данные нарушают ограничения, логическая репликация приостанавливается до устранения конфликта. С помощью команды ALTER SUBSCRIPTION ... SKIP можно пропустить все изменения данных в рамках транзакции. Этот параметр не влияет на уже подготовленные транзакции при включенной двухфазной фиксации. После успешного пропуска или завершения транзакции LSN (хранящийся в pg_subscription.subskiplsn) сбрасывается. Подробнее смотрите раздел «Конфликты» о конфликтах логической репликации. Для использования этой команды требуются права суперпользователя.

skip_option : Определяет свойства данной операции. Поддерживается следующий параметр:

lsn (pg_lsn) указывает конечный LSN удаленной транзакции, изменения которой нужно пропустить. Это LSN, в котором транзакция была зафиксирована или подготовлена. Пропуск отдельных подтранзакций не поддерживается. Указание NONE сбрасывает LSN.

new_owner
Задает имя нового владельца подписки.
new_name
Указывает новое имя подписки.

Если указан параметр типа boolean, часть = value можно опустить, что эквивалентно указанию TRUE.

Примеры

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

ALTER SUBSCRIPTION mysub SET PUBLICATION insert_only;

Отключение подписки:

ALTER SUBSCRIPTION mysub DISABLE;

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

ALTER SUBSCRIPTION является расширением PostgreSQL.

Смотрите также

CREATE SUBSCRIPTION, DROP SUBSCRIPTION, CREATE PUBLICATION, ALTER PUBLICATION