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 для публикации нужно быть суперпользователем. Для смены владельца нужно иметь возможность выполнять SET ROLE для новой роли-владельца, и эта роль должна иметь право 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 является расширением QHB.


См. также

CREATE PUBLICATION, DROP PUBLICATION, CREATE SUBSCRIPTION, ALTER SUBSCRIPTION