ALTER PUBLICATION
Эта страница переведена при помощи нейросети GigaChat.
ALTER PUBLICATION
— изменение определения публикации.
Синтаксис
ALTER PUBLICATION name ADD publication_object [, ...]
ALTER PUBLICATION name SET publication_object [, ...]
ALTER PUBLICATION name DROP publication_object [, ...]
ALTER PUBLICATION name SET ( publication_parameter [= value] [, ... ] )
ALTER PUBLICATION name OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
ALTER PUBLICATION name RENAME TO new_name
where publication_object is one of:
TABLE [ ONLY ] table_name [ * ] [ ( column_name [, ... ] ) ] [ WHERE ( expression ) ] [, ... ]
TABLES IN SCHEMA { schema_name | CURRENT_SCHEMA } [, ... ]
Описание
ALTER PUBLICATION
используется для изменения свойств публикации.
Три первых варианта команды позволяют изменять список таблиц или схем, входящих в публикацию. Ключевое слово SET
заменяет текущий список таблиц/схем в публикации на указанный — все ранее включенные объекты будут исключены. Ключевое слово ADD
добавляет одну или несколько таблиц/схем в публикацию. Ключевое слово DROP
удаляет таблицы/схемы из публикации.
Если публикация уже используется подпиской, то после добавления новых таблиц/схем потребуется выполнить ALTER SUBSCRIPTION ... REFRESH PUBLICATION
на стороне подписчика, чтобы изменения вступили в силу.
Также учтите, что DROP TABLES IN SCHEMA
не удаляет из публикации те таблицы, которые были добавлены через FOR TABLE
или ADD TABLE
.
Комбинирование DROP
с выражением WHERE
запрещено.
Четвертый вариант команды позволяет изменять все параметры публикации, которые задавались через CREATE PUBLICATION. Если какой-либо параметр не указан в команде, его текущее значение сохраняется.
Оставшиеся варианты используются для изменения владельца публикации или ее имени.
Чтобы выполнить эту команду, необходимо быть владельцем публикации. Добавление таблицы в публикацию требует также быть владельцем этой таблицы.
Для использования ADD TABLES IN SCHEMA
или SET TABLES IN SCHEMA
вызывающий пользователь должен быть суперпользователем.
Чтобы изменить владельца, нужно иметь право SET ROLE
к новой роли-владельцу, и эта роль должна обладать привилегией CREATE
на базе данных.
Новый владелец публикации с FOR ALL TABLES
или FOR TABLES IN SCHEMA
должен быть суперпользователем. Суперпользователь может изменить владельца публикации без ограничений.
Публикация не может одновременно включать таблицы с указанием списка столбцов и схемы (через ADD/SET TABLES IN SCHEMA
), и наоборот.
Параметры
name
- Указывает имя существующей публикации, которая должна быть изменена.
table_name
- Указывает имя существующей таблицы. Если указано
ONLY
, то изменение применяется только к этой таблице, без потомков. БезONLY
затрагиваются и все дочерние таблицы (если есть). Можно также явно указать*
после имени таблицы, чтобы показать, что потомки включаются.Дополнительно может быть указан список столбцов, смотрите подробности в CREATE PUBLICATION.
Подписка с несколькими публикациями, в которых одна и та же таблица была опубликована с разными списками столбцов, не поддерживается. Смотрите Предупреждение в разделе «Списки столбцов» для ознакомления с потенциальными проблемами при изменении списков столбцов.
Также может быть указан необязательный предикат
WHERE
. В этом случае строки, для которых выражение возвращаетFALSE
илиNULL
, не будут публиковаться. Выражение обязательно должно быть заключено в круглые скобки. Оценка выражения происходит от имени роли, используемой для репликационного подключения.
schema_name
- Указывает имя существующей схемы.
SET (publication_parameter [=value] [, ... ])
- Позволяет изменить параметры публикации, ранее установленные командой CREATE PUBLICATION. Подробности о допустимых параметрах смотрите в описании этой команды.
new_owner
- Задает имя нового владельца публикации.
new_name
- Задает новое имя публикации.
Примеры
Изменение публикации так, чтобы публиковались только удаления и изменения:
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.
Смотрите также
CREATE PUBLICATION, DROP PUBLICATION, CREATE SUBSCRIPTION, ALTER SUBSCRIPTION