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 для новой роли-владельца. Если для подписки задано password_required=false, изменять её могут только суперпользователи.
При обновлении подписки производится удаление отношений, которые были из неё исключены, а также удаление слотов синхронизации этих таблиц, если таковые имеются. Эти слоты необходимо удалять, чтобы были освобождены ресурсы, выделенные для данной подписки на удалённом сервере. Если по причине сбоя в сети или какой-то другой ошибки PostgreSQL не сможет удалить эти слоты, выполнение команды будет прервано ошибкой. Для разрешения такой ситуации можно либо попробовать повторить эту операцию, либо разорвать связь слота с подпиской и удалить подписку, выполнив 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удаляет публикации из этого списка. В формах- ADDи- SETдопускается указание несуществующих публикаций в расчёте на то, что они будут добавлены позже. За подробностями обратитесь к описанию CREATE SUBSCRIPTION. По умолчанию эта команда также выполняет действие- REFRESH PUBLICATION.- В указании - параметр_публикациизадаются дополнительные свойства операции. Поддерживаются следующие параметры:- refresh(- boolean)
- Со значением - falseданная команда не будет обновлять информацию о таблицах. В этом случае следует выполнить- REFRESH PUBLICATIONотдельно. Значение по умолчанию —- true.
 - Кроме того, здесь могут задаваться параметры, относящиеся к - REFRESH PUBLICATIONи управляющие неявной операцией обновления.
- REFRESH PUBLICATION
- Считывает недостающую информацию о таблицах с публикующего сервера. В результате производится репликация таблиц, добавленных в публикации, на которые оформлена подписка, после - CREATE SUBSCRIPTIONили последнего вызова- REFRESH PUBLICATION.- В указании - параметр_обновлениязадаются дополнительные свойства операции обновления. Поддерживаются следующие параметры:- 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) очищается. Подробнее конфликты логической репликации описаны в Разделе 31.5.- Параметр_пропускаопределяет свойства данной операции. Поддерживается следующий параметр:- 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 является расширением PostgreSQL.