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

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.

Чтобы выполнить эту команду, необходимо быть владельцем соответствующей подписки. Изменить владельца можно только при условии, что текущий пользователь является прямым или косвенным членом новой роли владельца. Новый владелец должен быть суперпользователем. В настоящее время все владельцы подписок должны быть суперпользователями, поэтому проверки владельца фактически не выполняются. Однако это может измениться в будущем.

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

ENABLE

Включает ранее отключенную подписку, запуская рабочий процесс логической репликации по завершении транзакции.

DISABLE

Отключает работающую подписку, останавливая рабочий процесс логической репликации по завершении транзакции.

SET ( subscription_parameter [= value] [, ... ] )

Изменяет параметры, заданные при CREATE SUBSCRIPTION. Поддерживаются: slot_name, synchronous_commit, binary, streaming, disable_on_error.

SKIP ( skip_option = value )

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

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

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

new_owner

Задает имя нового владельца подписки.

new_name

Указывает новое имя подписки.

Примеры

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

ALTER SUBSCRIPTION mysub SET PUBLICATION insert_only;

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

ALTER SUBSCRIPTION mysub DISABLE;

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

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

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

CREATE SUBSCRIPTION, DROP SUBSCRIPTION, CREATE PUBLICATION, ALTER PUBLICATION