更新时间:2024-10-25 GMT+08:00

CREATE PUBLICATION

功能描述

向当前数据库添加一个新的发布,发布的名称必须与当前数据库中任何现有发布的名称不同。发布本质上是通过逻辑复制将一组表的数据变更进行复制。

注意事项

  • 该语法仅8.2.0.100及以上集群版本支持。
  • 如果既没有指定FOR TABLE,也没有指定FOR ALL TABLES, 那么这个发布就是以一组空表开始的,可以在后续添加表。
  • 创建发布不会开始复制。它只为未来的订阅者定义一个分组和过滤逻辑。 要创建一个发布,调用者必须拥有当前数据库的CREATE权限。
  • 要将表添加到发布中,调用者必须拥有该表的所有权。FOR ALL TABLES和FOR ALL TABLES IN SCHEMA子句要求调用者具有系统管理员权限。
  • 对一个待发布表,不能同时通过FOR TABLE和FOR ALL TABLES IN SCHEMA方式添加到同一个发布中。

语法格式

1
2
3
4
CREATE PUBLICATION name
    [ FOR ALL TABLES
      | FOR publication_object [, ... ] ]
    [ WITH ( publication_parameter [=value] [, ... ] ) ];

其中发布对象publication_object为:

TABLE table_name [, ...]
| ALL TABLES IN SCHEMA schema_name [, ... ]

参数说明

  • name

    新发布的名称。

    取值范围:字符串,要符合标识符的命名规范。

  • FOR ALL TABLES

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

  • FOR TABLE

    指定要添加到发布的表的列表。只有细粒度容灾主表才能成为发布的一部分。

  • table_name

    要添加到发布的表的名字,可以带模式名。

    取值范围:字符串,要符合标识符的命名规范。

  • FOR ALL TABLES IN SCHEMA

    将发布标记为复制指定模式列表中所有细粒度容灾主表的更改,包括在将来创建的表。

  • schema_name

    要添加到发布的模式的名称。

    取值范围:字符串,要符合标识符的命名规范。

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

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

    • publish

      这个参数决定了哪些DML操作将由新的发布给订阅者。

      取值范围:字符串,用逗号分隔的操作列表。允许的操作是insert,update,delete和truncate。

      默认发布所有动作,所以这个选项的默认值是:'insert, update, delete, truncate'。

示例

  • 创建一个发布,发布两个表和两个模式中所有更改。

    创建示例表tpcds.ship_mode_t1:

    CREATE TABLE tpcds.ship_mode_t1
    (
        SM_SHIP_MODE_SK           INTEGER               NOT NULL,
        SM_SHIP_MODE_ID           CHAR(16)              NOT NULL,
        SM_TYPE                   CHAR(30)                      ,
        SM_CODE                   CHAR(10)                      ,
        SM_CARRIER                CHAR(20)                      ,
        SM_CONTRACT               CHAR(20)
    ) WITH (ORIENTATION = COLUMN,enable_disaster_cstore='on')
    DISTRIBUTE BY HASH(SM_SHIP_MODE_SK);

    创建示例表tpcds.customer_address_p1:

    CREATE TABLE tpcds.customer_address_p1
    (
        CA_ADDRESS_SK             INTEGER               NOT NULL,
        CA_ADDRESS_ID             CHAR(16)              NOT NULL,
        CA_STREET_NUMBER          CHAR(10)                      ,
        CA_STREET_NAME            VARCHAR(60)                   ,
        CA_STREET_TYPE            CHAR(15)                      ,
        CA_SUITE_NUMBER           CHAR(10)                      ,
        CA_CITY                   VARCHAR(60)                   ,
        CA_COUNTY                 VARCHAR(30)                   ,
        CA_STATE                  CHAR(2)                       ,
        CA_ZIP                    CHAR(10)                      ,
        CA_COUNTRY                VARCHAR(20)                   ,
        CA_GMT_OFFSET             DECIMAL(5,2)                  ,
        CA_LOCATION_TYPE          CHAR(20)
    ) WITH (ORIENTATION = COLUMN,enable_disaster_cstore='on')
    DISTRIBUTE BY HASH(CA_ADDRESS_SK);

    创建示例模式myschema1:

    CREATE SCHEMA myschema1;

    创建示例模式myschema2:

    CREATE SCHEMA myschema2;

    创建发布,发布两个表和两个模式中所有更改。

    CREATE PUBLICATION mypublication FOR TABLE users, departments, ALL TABLES IN SCHEMA myschema1, myschema2;
  • 创建一个发布,发布所有表中的所有更改。
    CREATE PUBLICATION alltables FOR ALL TABLES;