2024年9月26日: PostgreSQL 17 发布!
支持的版本:当前 (17) / 16 / 15 / 14 / 13 / 12
开发版本:devel
不支持的版本: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 扩展。

提交更正

如果您在文档中看到任何不正确的内容,与您对特定功能的体验不符或需要进一步说明,请使用 此表格 报告文档问题。