VastbaseE100

基于开源技术的HTAP数据库管理系统。性能优异,稳定可靠,提供诸多专属领域特性。

Menu

CREATE PUBLICATION

CREATE PUBLICATION - 定义新发布

语法格式

CREATE PUBLICATION name
    [ FOR TABLE [ ONLY ] table_name [ * ] [, ...]
      | FOR ALL TABLES ]
    [ WITH ( publication_parameter [= value] [, ... ] ) ]

说明

CREATE PUBLICATION在当前添加了一个新的数据库发布。发布名称必须与当前数据库中任何现有发布的名称不同。

发布本质上是一组表,其数据更改旨在通过逻辑复制进行复制。有关发布如何适应逻辑复制设置的详细信息。

参数说明

  • name

    新发布的名称。

  • FOR TABLE

    指定要添加到发布的表的列表。如果在表名之前指定了ONLY, 那么只有该表被添加到发布中。如果没有指定ONLY, 则添加表及其所有后代表(如果有的话)。可选地, 可以在表名之后指定*以明确指示包含后代表。 只有持久基表才能成为出版物的一部分。临时表、非日志表、外表、物化视图、 常规视图和分区表不能成为发布的一部分。要复制分区表, 请将各个分区添加到发布中。

  • FOR ALL TABLES

    将发布标记为复制数据库中所有表的更改,包括在将来创建的表。

  • WITH ( publication_parameter [= value] [, … ] )

    该子句指定发布的可选参数。支持下列参数:

    • publish (string)

    这个参数决定了哪些DML操作将由新的发布发布给订阅者。 该值是用逗号分隔的操作列表。允许的操作是insert, update,delete和truncate。 默认是发布所有的动作,所以这个选项的默认值是 'insert, update, delete, truncate'。

注意事项

如果既未指定 FOR TABLE 也未指定 FOR ALL TABLES,则发布将以一组空表开始。如果要在以后添加表,这很有用。

创建发布不会启动复制。它仅为未来订户定义分组和过滤逻辑。

要创建发布,调用用户必须具有当前数据库的 CREATE 权限。(当然,超级用户绕过了这张支票。)

要将表添加到发布,调用用户必须拥有该表的所有权。 FOR ALL TABLES子句要求调用用户为超级用户。

添加到发布 UPDATE 和/或 DELETE 操作的发布的表必须已定义 REPLICA IDENTITY。否则,这些表格将禁止这些操作。

对于 INSERT … ON CONFLICT命令,发布将发布实际由该命令产生的操作。因此,根据结果,它可能会以INSERT 或 UPDATE 发布,或者根本不会发布。

COPY … FROM 命令作为 INSERT 操作发布。

不发布DDL操作。

示例

创建一个发布两个表中的所有更改的发布:

CREATE PUBLICATION mypublication FOR TABLE users, departments;

创建一个发布所有表中所有更改的发布:

CREATE PUBLICATION alltables FOR ALL TABLES;

创建仅在一个表中发布 INSERT 操作的发布:

CREATE PUBLICATION insert_only FOR TABLE mydata
    WITH (publish = 'insert');