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'。
- publish
示例
- 创建一个发布,发布两个表和两个模式中所有更改。
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;