Redrock Postgres 搜索 英文
版本: 10 / 11 / 12 / 13 / 14 / 15 / 16

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 扩展。

另请参阅

CREATE PUBLICATIONDROP PUBLICATIONCREATE SUBSCRIPTIONALTER SUBSCRIPTION