# ALTER PUBLICATION
#### 功能描述
更改发布的属性。
#### 注意事项
- 该语法仅8.2.0.100及以上集群版本支持。
- 发布的所有者和系统管理员才能执行ALTER PUBLICATION。
- 要更改发布的所有者，用户必须是新所有者角色的直接或者间接成员，并且新的所有者必须具有当前数据库的CREATE权限。
- FOR ALL TABLES发布的新所有者必须是系统管理员。
- 管理员用户可以更改任何发布的所属关系。
 
#### 语法格式
- 向发布中添加一个或多个发布对象。
  ```
  ALTER PUBLICATION name ADD publication_object [, ...]
  ```
  
- 从发布中删除一个或多个发布对象。
  ```
  ALTER PUBLICATION name DROP publication_object [, ...]
  ```
  
- 用指定的发布对象替换当前发布对象。
  ```
  ALTER PUBLICATION name SET publication_object [, ...]
  ```
  
- 设置发布的参数，未显式指定的参数保持原值。
  ```
  ALTER PUBLICATION name SET ( publication_parameter [= value] [, ... ] )
  ```
  
- 更改发布的所有者。
  ```
  ALTER PUBLICATION name OWNER TO new_owner
  ```
  

- 重命名发布。
  ```
  ALTER PUBLICATION name RENAME TO new_name
  ```
  
其中发布对象publication_object为：
```
TABLE table_name [, ...]
| ALL TABLES IN SCHEMA schema_name [, ... ]
```
#### 参数说明
表1ALTER PUBLICATION参数说明 
| 参数                                                      | 描述                                | 取值范围                                                                                                                                                                                          |
|:---|:---|:---|
| name                                                  | 需要修改的发布的名称。   | 已存在的发布名。                                                                                                                                                                                      |
| table_name                                             | 表名称。                            | 已存在的表名。                                                                                                                                                                                       |
| schema_name                                              | 模式的名称。                          | 已存在的模式名。                                                                                                                                                                                      |
| SET ( publication_parameter \[= value\] \[, ... \] ) | 该子句修改最初由CREATE PUBLICATION设置的发布参数。 | 详细的参数说明请参考CREATE PUBLICATION的[参数说明](https://support.huaweicloud.com/sqlreference-911-dws/dws_06_0285.html#ZH-CN_TOPIC_0000002616106471__zh-cn_topic_0000001811634585_section1549681213574)。 |
| new_owner                                              | 发布的新所有者。                           | 已存在的用户名。                                                                                                                                                                                       |
| new_name                                             | 发布的新名称。                            | 字符串，需符合[标识符命名规范](https://support.huaweicloud.com/sqlreference-911-dws/dws_06_0007.html#ZH-CN_TOPIC_0000002202094021__section1475018612353)。                                                   |
   
#### 示例
- 创建模式、示例表及样例数据。
  ```
  DROP SCHEMA IF EXISTS pub_demo;
  CREATE SCHEMA pub_demo;
  DROP TABLE IF EXISTS pub_demo.sales;
  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);
  DROP TABLE IF EXISTS pub_demo.sales;
  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');
  ```
  创建名称为pub_sales的发布。
  ```
  CREATE PUBLICATION pub_sales FOR TABLE pub_demo.sales;
  ```
  

- 向发布中添加表。
  ```
  ALTER PUBLICATION pub_sales ADD TABLE pub_demo.customers;
  ALTER PUBLICATION pub_sales ADD TABLE pub_demo.customers;
  ```
  
- 从发布中删除表。
  ```
  ALTER PUBLICATION pub_sales DROP ALL TABLES IN SCHEMA pub_demo;
  ALTER PUBLICATION pub_sales DROP TABLE pub_demo.customers;
  ```
  
- 重新设置发布对象。
  ```
  ALTER PUBLICATION pub_sales SET TABLE pub_demo.customers;
  ```
  
- 向发布中添加整个schema的所有表。
  ```
  ALTER PUBLICATION pub_sales ADD ALL TABLES IN SCHEMA public;
  ```
  
- 修改发布参数，只发布INSERT操作。
  ```
  ALTER PUBLICATION pub_sales SET (publish = 'insert');
  ```
  
- 修改发布的所有者。
  ```
  CREATE ROLE new_publisher PASSWORD '********';
  GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA pub_demo TO new_publisher;
  ALTER PUBLICATION pub_sales OWNER TO new_publisher;
  ```
  
- 修改发布名称。
  ```
  ALTER PUBLICATION pub_sales RENAME TO pub_sales_new;
  ```
  
 
#### 相关链接
[CREATE PUBLICATION](https://support.huaweicloud.com/sqlreference-911-dws/dws_06_0285.html)，[DROP PUBLICATION](https://support.huaweicloud.com/sqlreference-911-dws/dws_06_0286.html)
#### 查看数据库中的发布信息
DWS提供以下系统表和视图用于查看当前数据库中的发布信息。
- [PG_PUBLICATION](https://support.huaweicloud.com/devg-dws/dws_04_1040.html)系统表，用于查看当前数据库中创建的发布数据信息，包括发布名称、所有者、参数设置等。
- [PG_PUBLICATION_TABLES](https://support.huaweicloud.com/devg-dws/dws_04_1045.html)系统视图，用于查看发布包含的表。
 
