支持的版本: 当前 (17) / 16 / 15 / 14 / 13
开发版本: devel
不支持的版本: 12 / 11 / 10

ALTER PUBLICATION

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 子句会将发布中的表/模式列表替换为指定的列表;发布中存在的现有表/模式将被删除。ADDDROP 子句将从发布中添加和删除一个或多个表/模式。请注意,向已经订阅的发布添加表/模式需要在订阅端执行 ALTER SUBSCRIPTION ... REFRESH PUBLICATION 操作才能生效。另请注意,DROP TABLES IN SCHEMA 不会删除使用 FOR TABLE/ ADD TABLE 指定的任何模式表,并且不允许将 DROPWHERE 子句组合使用。

概要中列出的此命令的第四个变体可以更改在 CREATE PUBLICATION 中指定的所有发布属性。命令中未提及的属性保留其先前的设置。

其余变体更改发布的所有者和名称。

您必须拥有该发布才能使用 ALTER PUBLICATION。向发布添加表还需要拥有该表。对发布执行 ADD TABLES IN SCHEMASET TABLES IN SCHEMA 需要调用用户是超级用户。要更改所有者,您必须能够 SET ROLE 为新的所有者角色,并且该角色必须在数据库上具有 CREATE 权限。此外,FOR ALL TABLESFOR TABLES IN SCHEMA 发布的新所有者必须是超级用户。但是,超级用户可以更改发布的所属关系,而无需考虑这些限制。

当发布还发布带有列列表的表时,添加/设置任何模式,反之亦然,是不支持的。

参数

name

要更改其定义的现有发布的名称。

table_name

现有表的名称。如果在表名前指定了 ONLY,则仅影响该表。如果未指定 ONLY,则会影响该表及其所有后代表(如果有)。可选地,可以在表名后指定 *,以明确指示包括后代表。

可以选择指定一个列列表。有关详细信息,请参见 CREATE PUBLICATION。请注意,不支持订阅中具有多个发布,其中同一个表已使用不同的列列表发布。有关更改列列表时可能出现的问题的详细信息,请参见 警告:组合来自多个发布的列列表

如果指定了可选的 WHERE 子句,则 expression 计算结果为 false 或 null 的行将不会发布。请注意,表达式需要用括号括起来。expression 使用用于复制连接的角色进行评估。

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;

将模式 marketingsales 添加到发布 sales_publication

ALTER PUBLICATION sales_publication ADD TABLES IN SCHEMA marketing, sales;

将表 usersdepartments 和模式 production 添加到发布 production_publication

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

兼容性

ALTER PUBLICATIONPostgreSQL 扩展。

提交更正

如果您在文档中发现任何不正确、与您特定功能的使用体验不符或需要进一步澄清的内容,请使用此表单报告文档问题。