↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 13 / 12 / 11 / 10

ALTER PUBLICATION

ALTER PUBLICATION — 修改发布的定义

大纲

ALTER PUBLICATION name ADD publication_object [, ...]
ALTER PUBLICATION name SET publication_object [, ...]
ALTER PUBLICATION name DROP publication_drop_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

其中publication_object可以是:

    TABLE table_and_columns [, ... ]
    TABLES IN SCHEMA { schema_name | CURRENT_SCHEMA } [, ... ]

其中publication_drop_object可以是:

    TABLE [ ONLY ] table_name [ * ] [, ... ]
    TABLES IN SCHEMA { schema_name | CURRENT_SCHEMA } [, ... ]

其中table_and_columns是:

    [ ONLY ] table_name [ * ] [ ( column_name [, ... ] ) ] [ WHERE ( expression ) ]

描述

ALTER PUBLICATION 命令可更改发布的属性。

前三种形式会更改哪些表或模式属于该发布。SET 子句会用指定列表替换发布中的表或模式列表;原先已在该发布中的表或模式将被移除。ADD 和 DROP 子句则会向发布中添加或移除一个或多个表或模式。请注意,向已经被订阅的发布中添加表或模式后,需要在订阅端执行 ALTER SUBSCRIPTION ... REFRESH PUBLICATION 操作后才会生效。还要注意,DROP TABLES IN SCHEMA 不会移除那些位于模式中、但通过 FOR TABLE/ADD TABLE 单独指定的表。

提要中列出的第四种形式可更改 CREATE PUBLICATION 中指定的所有发布属性。命令中未提及的属性会保留其先前的设置。

其余几种形式用于更改发布的所有者和名称。

要使用 ALTER PUBLICATION,你必须拥有该发布。向发布中添加表还要求拥有该表。对发布执行 ADD TABLES IN SCHEMA 和 SET TABLES IN SCHEMA 要求调用用户为超级用户。要更改所有者,你必须能够对新的拥有角色执行 SET ROLE,并且该角色必须在数据库上具有 CREATE 权限。此外,FOR ALL TABLES 或 FOR 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;

将模式 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 的一个扩展。

报告文档问题

阅读 上游文档. 通过 PostgreSQL 文档反馈表单.