# ALTER SERVER
#### 功能描述
增加、修改和删除外部服务器的定义。
现有外部服务器（server）可以使用pg_foreign_server系统表查询。
#### 注意事项
- 只有服务器的所有者有权限执行ALTER SERVER命令，系统管理员默认拥有此权限。
- 要更改服务器的所有者，必须是外部服务器的OWNER并且也是新的所有者角色的直接或者间接成员，且必须对外部服务器的外部数据封装器有USAGE权限。
 
#### 语法格式
- 修改外部服务的参数。
  ```
  ALTER SERVER server_name [ VERSION 'new_version' ]
      [ OPTIONS ( {[ ADD | SET | DROP ] option ['value']} [, ... ] ) ];
  ```
  

- 修改外部服务的所有者。
  ```
  ALTER SERVER server_name 
      OWNER TO new_owner;
  ```
  

- 修改外部服务的名称。
  ```
  ALTER SERVER server_name 
      RENAME TO new_name;
  ```
  

- 刷新HDFS配置文件。
  ```
  ALTER SERVER server_name REFRESH OPTIONS;
  ```
  
 
#### 参数说明
表1ALTER SERVER参数说明 
| 参数             | 描述                                                                                                                                                                           | 取值范围                                                                                                                                     |
|:---|:---|:---|
| server_name      | 需要修改的外部服务的名称。                                                                                                                                            | 已存在的外部服务器名。                                                                                                                             |
| new_version     | 新的外部服务器版本。                                                                                                                                                                 | -                                                                                                                                       |
| OPTIONS      | 更改服务器的选项。ADD、SET和DROP指定要执行的操作。OPTIONS选项未指定时默认为ADD操作。 对于HDFS Server目前只支持SET操作，ADD/DROP操作现有版本不支持。语法中SET和DROP操作语法依然保留，以便后续扩展使用。 | option和value为对应操作的参数可参考[表2]。                                                         |
| new_owner      | 外部服务器的新所有者。                                                                                                                                              | 有效的用户名。                                                                                                                                   |
| new_name         | 外部服务器的新名称。                                                                                                                                                                  | 字符串，需符合[标识符命名规范](https://support.huaweicloud.com/sqlreference-dws/dws_06_0007.html#ZH-CN_TOPIC_0000001811634529__section1475018612353)。 |
| REFRESH OPTIONS | 刷新HDFS的配置文件缓存信息，在配置文件有变动时执行，若不执行可能会访问报错。 该参数用于更新hdfs server配置缓存，不能与其相关的HDFS外表访问并发。                                              | -                                                                                                                                       |
   
 表2修改外部服务器所支持的**OPTIONS** 参数说明 
| 参数                   | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | 取值范围                                                                                                                                                                                                                                                                                                                         |
|:---|:---|:---|
| address            | OBS服务的终端节点（Endpoint）。 HDFS集群的主备节点所在的IP地址以及端口。 说明： - 对于HDFS server，address必须存在，所以ADD和DROP操作不被允许。  - address目前只支持点分十进制格式的IPv4格式，且address字符串中不能出现空格，多组address以逗号作为分隔符。ip和port之间使用":"来区分。HDFS集群中ip、port组对推荐设置两组，分别对应HDFS NameNode主备节点的address。  - 当server类型为DLI时，address为DLI服务上数据所存储的OBS address。   | -                                                                                                                                                                                                                                                                                                                             |
| hdfscfgpath         | HDFS集群的配置文件。 说明： - 若HDFS为安全模式时，hdfscfgpath是必选项，否则为可选项。  - 若设置hdfscfgpath时，path仅能设置一个。                                                                                                                                                                                                                                                                                                                                                          | -                                                                                                                                                                                                                                                                                                                              |
| fed                 | 表示dfs_fdw连接的是HDFS为联邦模式。 取值rbf，表示HDFS为联邦rbf方式。 说明： 该参数8.1.2及以上版本支持；8.0.0基线版本下，仅8.0.0.10及以上版本支持。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | -                                                                                                                                                                                                                                                                                                                             |
| encrypt            | 是否对数据进行加密，该参数仅支持在type为OBS时设置。默认值为off。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | - on表示对数据进行加密。  - off表示不对数据进行加密。   |
| access_key          | OBS访问协议对应的AK值（OBS云服务界面由用户获取），创建外表时AK值会加密保存到数据库的元数据表中。该参数仅支持type为OBS时设置。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | -                                                                                                                                                                                                                                                                                                                             |
| secret_access_key  | OBS访问协议对应的SK值（OBS云服务界面由用户获取），创建外表时SK值会加密保存到数据库的元数据表中。该参数仅支持type为OBS时设置。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | -                                                                                                                                                                                                                                                                                                                             |
| dli_address          | DLI服务的终端节点，即endpoint。该参数仅支持type为DLI时设置。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | -                                                                                                                                                                                                                                                                                                                             |
| dli_access_key    | DLI访问协议对应的AK值（DLI云服务界面由用户获取），创建外表时AK值会保存到数据库的元数据表中。该参数仅支持type为DLI时设置。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | -                                                                                                                                                                                                                                                                                                                             |
| dli_secret_access_key | DLI访问协议对应的SK值（DLI云服务界面由用户获取），创建外表时SK值会加密保存到数据库的元数据表中。该参数仅支持type为DLI时设置。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | -                                                                                                                                                                                                                                                                                                                              |
| region              | 此参数表示OBS服务的IP地址或者域名信息。该参数仅支持type为OBS时设置。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | -                                                                                                                                                                                                                                                                                                                             |
| dbname              | 用于协同分析、跨集群互联互通，表示将要连接的远端集群的数据库名称。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | -                                                                                                                                                                                                                                                                                                                              |
| username           | 用于协同分析、跨集群互联互通，表示将要连接的远端集群的用户名。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | -                                                                                                                                                                                                                                                                                                                              |
| password            | 用于协同分析、跨集群互联互通，表示将要连接的远端集群的用户密码。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | -                                                                                                                                                                                                                                                                                                                               |
| syncsrv              | 仅用于跨集群互联互通，表示数据同步过程中使用到的GDS服务，设置方式与GDS外表的location属性相同。该参数仅8.1.2及以上版本支持。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | -                                                                                                                                                                                                                                                                                                                               |
   
#### 示例
创建外部服务器hdfs_server，其中hdfs_fdw为数据库中存在的foreign data wrapper。
```
DROP SERVER IF EXISTS hdfs_server;
CREATE SERVER hdfs_server FOREIGN DATA WRAPPER HDFS_FDW OPTIONS 
   (address '10.10.0.100:25000,10.10.0.101:25000',
    hdfscfgpath '/opt/hadoop_client/HDFS/hadoop/etc/hadoop', 
    type 'HDFS'
) ;
```
修改外部服务器hdfs_server的address选项。
```
ALTER SERVER hdfs_server OPTIONS ( SET address '10.10.0.110:25000,10.10.0.120:25000');
```
修改外部服务器hdfs_server的hdfscfgpath选项。
```
ALTER SERVER hdfs_server OPTIONS ( SET hdfscfgpath '/opt/bigdata/hadoop');
```
#### 相关链接
[CREATE SERVER](https://support.huaweicloud.com/sqlreference-dws/dws_06_0175.html)，[DROP SERVER](https://support.huaweicloud.com/sqlreference-dws/dws_06_0206.html)
