# 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](https://support.huaweicloud.com/sqlreference-911-dws/dws_06_0284.html)命令在该发布添加表。
- CREATE PUBLICATION不会启动复制过程，只为未来的订阅者定义一个分组和过滤逻辑。
- 不能同时通过FOR TABLE和FOR ALL TABLES IN SCHEMA方式添加同一个待发布表到同一个发布中。
 
#### 语法格式
```
CREATE PUBLICATION name
    [ FOR ALL TABLES
      | FOR publication_object [, ... ] ]
    [ WITH ( publication_parameter [=value] [, ... ] ) ];
```
其中，发布对象publication_object为：
```
TABLE table_name [, ...]
| ALL TABLES IN SCHEMA schema_name [, ... ]
```
#### 参数说明
表1CREATE PUBLICATION参数说明 
| 参数                                                  | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | 取值范围                                                                                                                                                    |
|:---|:---|:---|
| name                                                | 新发布的名称。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | 字符串，要符合标识符的命名规范。参见[标识符命名规范](https://support.huaweicloud.com/sqlreference-911-dws/dws_06_0007.html#ZH-CN_TOPIC_0000002202094021__section1475018612353)。 |
| FOR ALL TABLES                                     | 将发布标记为复制数据库中所有细粒度容灾主表的更改，包括在将来创建的表。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | -                                                                                                                                                        |
| FOR TABLE                                           | 指定要添加到发布的表的列表。只有细粒度容灾主表才能成为发布的一部分。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | -                                                                                                                                                      |
| table_name                                         | 要添加到发布的表的名字，可以带模式名。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | 有效的表名称。                                                                                                                                                  |
| FOR ALL TABLES IN SCHEMA                           | 将发布标记为复制指定模式列表中所有细粒度容灾主表的更改，包括在将来创建的表。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | -                                                                                                                                                      |
| schema_name                                       | 要添加到发布的模式的名字。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | 有效的模式名称。                                                                                                                                                 |
| WITH ( publication_parameter \[=value\] \[, ... \] ) | 该子句指定发布的可选参数，当前支持publish参数。 publish参数决定了哪些DML操作将由新的发布给订阅者。 - 取值范围：字符串，用逗号分隔的操作列表。允许的操作为：INSERT、 UPDATE、DELETE和TRUNCATE。  - 默认值为：'insert, update, delete, truncate'，表示默认发布所有操作。   | -                                                                                                                                                        |
   
 #### 示例
- 创建模式、示例表及样例数据。
  ```
  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');
  ```
  
- 创建发布，发布所有表。
  ```
  CREATE PUBLICATION pub_all_tables FOR ALL TABLES;
  ```
  
- 创建发布，发布单个表sales 。
  ```
  CREATE PUBLICATION pub_sales_only FOR TABLE pub_demo.sales;
  ```
  
- 创建发布，发布单个表sales的所有操作（INSERT、 UPDATE、DELETE和TRUNCATE）。默认包含全部操作，也可显式声明。
  ```
  CREATE PUBLICATION pub_sales_all_ops 
  FOR TABLE pub_demo.sales 
  WITH (publish = 'insert, update, delete, truncate');
  ```
  
- 创建发布，发布单个表customers的INSERT操作。
  ```
  CREATE PUBLICATION pub_cust_insert 
  FOR TABLE pub_demo.customers 
  WITH (publish = 'insert');
  ```
  
 
#### 相关链接
[ALTER PUBLICATION](https://support.huaweicloud.com/sqlreference-911-dws/dws_06_0284.html#ZH-CN_TOPIC_0000002220193598)，[DROP PUBLICATION](https://support.huaweicloud.com/sqlreference-911-dws/dws_06_0286.html)
