CREATE PUBLICATION
功能描述
为当前数据库添加一个新的发布(PUBLICATION)。
发布本质上是通过逻辑复制将一组表的数据变更进行复制。数据库将自动跟踪并捕获这些源表上发生的数据操作(INSERT, UPDATE,DELETE和TRUNCATE),并通过逻辑复制机制,持续地将这些变更数据传输给所有配置并订阅(CREATE SUBSCRIPTION)该发布的目标数据库,从而实现源端到目标端的数据同步。
注意事项
- 该语法仅8.2.0.100及以上集群版本支持。
- 创建发布的用户必须拥有当前数据库的CREATE权限。
- 新创建的发布的名称不能与当前数据库中任何现有发布的名称相同。
- 要将表添加到发布中,操作用户必须拥有该表的所有权。FOR ALL TABLES和FOR ALL TABLES IN SCHEMA子句要求用户具有系统管理员权限。
- 如果创建发布时未指定FOR TABLE,也未指定FOR ALL TABLES, 则该发布是一组空表,后续可以通过ALTER PUBLICATION命令在该发布添加表。
- CREATE PUBLICATION不会启动复制过程,只为未来的订阅者定义一个分组和过滤逻辑。
- 不能同时通过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参数。 publish参数决定了哪些DML操作将由新的发布给订阅者。
| - |
示例
- 创建模式、示例表及样例数据。
CREATE SCHEMA pub_demo; CREATE TABLE pub_demo.sales ( sale_id INTEGER, product VARCHAR(50), amount INTEGER NOT NULL, sale_date DATE ) WITH (ORIENTATION = COLUMN,enable_disaster_cstore='on') DISTRIBUTE BY HASH ( sale_id); CREATE TABLE pub_demo.customers ( cust_id INTEGER, cust_name VARCHAR(50), region VARCHAR(20) ) WITH (ORIENTATION = COLUMN,enable_disaster_cstore='on') DISTRIBUTE BY HASH ( cust_id); INSERT INTO pub_demo.sales VALUES (1, 'Laptop', 500, '2026-01-15'); INSERT INTO pub_demo.sales VALUES (2, 'Mouse', 900, '2026-01-16'); INSERT INTO pub_demo.customers VALUES (101, 'Alice', 'East'); INSERT INTO pub_demo.customers VALUES (102, 'Bob', 'West'); - 创建发布,发布所有表。
1CREATE PUBLICATION pub_all_tables FOR ALL TABLES;
- 创建发布,发布单个表sales 。
1CREATE PUBLICATION pub_sales_only FOR TABLE pub_demo.sales;
- 创建发布,发布单个表sales的所有操作(INSERT、 UPDATE、DELETE和TRUNCATE)。默认包含全部操作,也可显式声明。
1 2 3
CREATE PUBLICATION pub_sales_all_ops FOR TABLE pub_demo.sales WITH (publish = 'insert, update, delete, truncate');
- 创建发布,发布单个表customers的INSERT操作。
1 2 3
CREATE PUBLICATION pub_cust_insert FOR TABLE pub_demo.customers WITH (publish = 'insert');