Postgresql 中文操作指南
Synopsis
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 } [, ... ]
Description
命令 ALTER PUBLICATION 可以更改发布的属性。
前三个 varient 更改了哪些表/模式是发布的一部分。 SET 子句将用指定列表替换发布中的表/模式列表;原来在发布中出现的表/模式将被删除。 ADD 和 DROP 子句将向发布添加或从此发布删除一个或多个表/模式。请注意,向已被订阅的发布中添加表/模式需要订阅方执行 ALTER SUBSCRIPTION … REFRESH PUBLICATION 操作才能生效。另请注意, DROP TABLES IN SCHEMA 不会删除使用 FOR TABLE / ADD TABLE 指定的任何模式表,并且不允许将 DROP 与 WHERE 子句结合使用。
概要中列出的此命令的第四个 varient 可以更改 CREATE PUBLICATION 中指定的所有发布属性。命令中未提及的属性保留其以前设置。
其余 varient 更改所有者和发布的名称。
您必须拥有该发布才能使用 ALTER PUBLICATION 。将表添加到发布中还需要拥有该表。 ADD TABLES IN SCHEMA 和 SET TABLES IN SCHEMA 向发布中添加表需要调用用户为超级用户。要更改所有者,您必须能够 SET ROLE 至新的所有者角色,且该角色必须在数据库上具有 CREATE 特权。此外, FOR ALL TABLES 或 FOR TABLES IN SCHEMA 发布的新所有者必须是超级用户。但是,超级用户可以更改发布的所有权,而无需考虑这些限制。
当发布也发布带有列列表的表格时,添加/设置任何模式,反之亦然不受支持。
Parameters
-
name
-
要更改其定义的现有发布的名称。
-
-
table_name
-
现有表格的名称。如果在表名称前指定了 ONLY ,则仅影响该表格。如果未指定 ONLY ,则该表及其所有后代表(如果有)将受到影响。可选择在表名称后指定 * ,以明确指示包括后代表。
-
可选择指定列列表。有关详细信息,请参见 CREATE PUBLICATION 。请注意,不支持在其中同个表已在具有不同列列表的多个发布中发布的订阅。有关更改列列表时可能出现的问题的详细信息,请参见 Warning: Combining Column Lists from Multiple Publications 。
-
如果指定了可选的 WHERE 子句,则 expression 求值为 false 或 null 的行将不会发布。请注意,表达式周围需要有括号。使用用于复制连接的角色来评估 expression 。
-
-
schema_name
-
现有模式的名称。
-
-
SET ( _publication_parameter [= value ] [, … ] )_
-
此子句更改最初由 CREATE PUBLICATION 设置的发布参数。有关详细信息,请参见此处。
-
-
new_owner
-
发布的新所有者的用户名。
-
-
new_name
-
发布的新名称。
-
Examples
将发布更改为仅发布删除和更新:
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;