更新时间:2025-08-04 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 [, ... ]

参数说明

表1 CREATE PUBLICATION参数说明

参数

描述

取值范围

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;