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