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
, изменять её могут только суперпользователи.
При обновлении подписки производится удаление отношений, которые были из неё исключены, а также удаление слотов синхронизации этих таблиц, если таковые имеются. Эти слоты необходимо удалять, чтобы были освобождены ресурсы, выделенные для данной подписки на удалённом сервере. Если по причине сбоя в сети или какой-то другой ошибки Postgres Pro не сможет удалить эти слоты, выполнение команды будет прервано ошибкой. Для разрешения такой ситуации можно либо попробовать повторить эту операцию, либо разорвать связь слота с подпиской и удалить подписку, выполнив 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
.
Параметры
имя
#Имя подписки, свойства которой изменяются.
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
иfailover
. Указатьpassword_required = false
может только суперпользователь.При изменении
slot_name
параметрыfailover
иtwo_phase
указанного слота могут отличаться от параметровfailover
иtwo_phase
, указанных в подписке. При создании слота убедитесь, что значения слота в параметрахfailover
иtwo_phase
совпадают с указанными в подписке, иначе слот на публикующем сервере может вести себя по-другому: например, слот на публикующем сервере может синхронизироваться с резервными серверами даже при выключенном в подписке параметреfailover
и не синхронизироваться даже при включённом в подписке параметреfailover
.SKIP (
#параметр_пропуска
=значение
)Пропускает применение всех изменений удалённой транзакции. Если входящие данные нарушают какие-либо ограничения, логическая репликация будет остановлена, пока конфликты не будут разрешены. Когда выполняется команда
ALTER SUBSCRIPTION ... SKIP
, рабочий процесс логической репликации пропускает все изменения данных в транзакции. Этот параметр не влияет на транзакции, которые уже подготовлены на стороне подписчика (в результате действия режимаtwo_phase
). После того, как рабочий процесс логической репликации успешно пропускает транзакцию или транзакция завершается, номер LSN (хранящийся вpg_subscription
.subskiplsn
) очищается. Подробнее конфликты логической репликации описаны в Разделе 29.6.Параметр_пропуска
определяет свойства данной операции. Поддерживается следующий параметр: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
является расширением Postgres Pro.