ALTER SUBSCRIPTION#

ALTER SUBSCRIPTION

ALTER SUBSCRIPTION

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, только суперпользователи могут её изменять.

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

Команды 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 было изменено.

См. Notes для подробностей о том, как 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. Только суперпользователь может установить password_required = false.

SKIP ( skip_option = value )

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

skip_option определяет параметры для данной операции. Поддерживается только одна опция:

lsn (pg_lsn)

Указывает конечный 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 - это расширение Tantor SE.