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 для подписки, нужно быть её владельцем. Чтобы сменить владельца, нужно быть непосредственным или опосредованным членом новой роли-владельца. Новый владелец должен быть суперпользователем. (В настоящее время все владельцы подписок должны быть суперпользователями, так что на практике проверка владельца будет пропущена. Но в будущем это может быть изменено.)
При обновлении подписки производится удаление отношений, которые были из неё исключены, а также удаление слотов синхронизации этих таблиц, если таковые имеются. Эти слоты необходимо удалять, чтобы были освобождены ресурсы, выделенные для данной подписки на удалённом сервере. Если по причине сбоя в сети или какой-то другой ошибки 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фильтра строк таблицы изменилось с момента подписки.
ENABLEВключает ранее отключённую подписку, запуская процесс логической репликации в конце транзакции.
DISABLEОтключает активную подписку, останавливая процесс логической репликации в конце транзакции.
SET (параметр_подписки[=значение] [, ... ] )Это предложение изменяет параметры, изначально установленные командой CREATE SUBSCRIPTION. За подробностями обратитесь к её описанию. Данное предложение позволяет изменить параметры
slot_name,synchronous_commit,binary,streamingиdisable_on_error.SKIP (параметр_пропуска=значение)Пропускает применение всех изменений удалённой транзакции. Если входящие данные нарушают какие-либо ограничения, логическая репликация будет остановлена, пока конфликты не будут разрешены. Когда выполняется команда
ALTER SUBSCRIPTION ... SKIP, рабочий процесс логической репликации пропускает все изменения данных в транзакции. Этот параметр не влияет на транзакции, которые уже подготовлены на стороне подписчика (в результате действия режимаtwo_phase). После того, как рабочий процесс логической репликации успешно пропускает транзакцию или транзакция завершается, номер LSN (хранящийся вpg_subscription.subskiplsn) очищается. Подробнее конфликты логической репликации описаны в Разделе 31.5. Для использования этой команды требуются права суперпользователя.Параметр_пропускаопределяет свойства данной операции. Поддерживается следующий параметр:lsn(pg_lsn)Указывает LSN завершения удалённой транзакции, изменения которой должны быть пропущены процессом логической репликации. LSN завершения — это LSN, с которым транзакция зафиксирована либо подготовлена. Пропуск отдельных подтранзакций не поддерживается. Значение
NONEсбрасывает ранее установленный LSN.
новый_владелецИмя пользователя, назначаемого новым владельцем подписки.
новое_имяНовое имя подписки.
Примеры
Изменение подписки, заключающееся в подписывании на публикацию insert_only:
ALTER SUBSCRIPTION mysub SET PUBLICATION insert_only;
Отключение (остановка) подписки:
ALTER SUBSCRIPTION mysub DISABLE;
Совместимость
ALTER SUBSCRIPTION является расширением PostgreSQL.