ALTER PUBLICATION

ALTER PUBLICATION — изменить определение публикации

Синтаксис

ALTER PUBLICATION имя ADD объект_публикации [, ...]
ALTER PUBLICATION имя SET объект_публикации [, ...]
ALTER PUBLICATION имя DROP объект_публикации [, ...]
ALTER PUBLICATION имя SET ( параметр_публикации [= значение] [, ... ] )
ALTER PUBLICATION имя OWNER TO { новый_владелец | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
ALTER PUBLICATION имя RENAME TO новое_имя

где объект_публикации может быть следующим:

    TABLE [ ONLY ] имя_таблицы [ * ] [ ( имя_столбца [, ... ] ) ] [ WHERE ( выражение ) ] [, ... ]
    TABLES IN SCHEMA { имя_схемы | CURRENT_SCHEMA } [, ... ]

Описание

Команда ALTER PUBLICATION может изменять атрибуты публикации.

Первые три формы управляют вхождением таблиц/схем в публикации. Предложение SET заменяет список таблиц/схем в публикации заданным списком; таблицы/схемы, входившие в публикацию ранее, будут удалены из неё. Предложения ADD и DROP добавляют и удаляют таблицы/схемы в публикации соответственно. Заметьте, что при добавлении таблиц/схем в публикацию, на которую уже оформлена подписка, необходимо выполнить ALTER SUBSCRIPTION ... REFRESH PUBLICATION на стороне подписчика, чтобы это изменение вступило в силу. Также заметьте, что команда DROP TABLES IN SCHEMA не удаляет относящиеся к заданной схеме таблицы, включённые в публикацию указаниями FOR TABLE/ADD TABLE, а с предложением DROP нельзя использовать предложение WHERE.

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

Остальные формы команды меняют владельца и имя публикации.

Для выполнения ALTER PUBLICATION необходимо владеть данной публикацией. Чтобы добавить таблицу в публикацию, дополнительно нужно быть владельцем этой таблицы. Для выполнения ADD TABLES IN SCHEMA и SET TABLES IN SCHEMA требуется быть суперпользователем. Чтобы сменить владельца, также необходимо быть непосредственным или опосредованным членом новой роли-владельца, а эта роль должна иметь право CREATE в базе данных. Кроме того, новым владельцем публикации вида FOR ALL TABLES или FOR TABLES IN SCHEMA должен быть суперпользователь. Однако суперпользователь может менять владельца публикации вне зависимости от этих ограничений.

Добавление/указание схемы, когда публикация также публикует таблицу со списком столбцом, равно как и обратная операция, не поддерживается.

Параметры

имя

Имя существующей публикации, определение которой изменяется.

имя_таблицы

Имя существующей таблицы. Если перед именем таблицы указано ONLY, затрагивается только заданная таблица. Без ONLY затрагивается и заданная таблица, и все её потомки (если таковые есть). После имени таблицы можно добавить необязательное указание *, чтобы явно обозначить, что должны затрагиваться и все дочерние таблицы.

Дополнительно может быть указан список столбцов. За подробностями обратитесь к CREATE PUBLICATION. Заметьте, что оформить одну подписку на несколько публикаций, в которых одна таблица опубликована с разными списками столбцов, нельзя. Подробнее проблемы, возможные при изменении списка столбцов, описаны в Внимание: объединение списков столбцов из нескольких публикаций.

Если указано необязательное предложение WHERE, строки, для которых выражение выдаёт false или null, не будут публиковаться. Заметьте, что выражение должно заключаться в круглые скобки. Вычисляется выражение от имени роли, которая применяется для соединения репликации.

имя_схемы

Имя существующей схемы.

SET ( параметр_публикации [= значение] [, ... ] )

Это предложение изменяет параметры публикации, изначально установленные командой CREATE PUBLICATION. За дополнительными сведениями обратитесь к её описанию.

новый_владелец

Имя пользователя, назначаемого новым владельцем публикации.

новое_имя

Новое имя публикации.

Примеры

Изменение публикации, чтобы публиковались только удаления и изменения:

ALTER PUBLICATION noinsert SET (publish = 'update, delete');

Добавление таблиц в публикацию:

ALTER PUBLICATION mypublication ADD TABLE users (user_id, firstname), departments;

Изменение набора столбцов, публикуемых для таблицы:

ALTER PUBLICATION mypublication SET TABLE users (user_id, firstname, lastname), TABLE departments;

Добавление схем marketing и sales в публикацию sales_publication:

ALTER PUBLICATION sales_publication ADD TABLES IN SCHEMA marketing, sales;

Добавление таблиц users, departments и схемы production в публикацию production_publication:

ALTER PUBLICATION production_publication ADD TABLE users, departments, TABLES IN SCHEMA production;

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

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