
# ALTER SERVER
#### 功能描述
增加、修改和删除一个现有server的参数。现有server可以从pg_foreign_server系统表查询。
#### 注意事项
- 只有server的所有者或者被授予了server的ALTER权限的用户才可以执行ALTER SERVER命令，系统管理员默认拥有该权限。但要修改server的所有者，当前用户必须是该server的所有者或者系统管理员，且该用户是新所有者角色的成员。
- OPTIONS中的敏感字段（如password、secret_access_key）在使用多层引号时，语义和不带引号的场景是不同的，因此不会被识别为敏感字段进行脱敏。
 
#### 语法格式
- 修改外部服务的参数。
```
ALTER SERVER server_name [ VERSION 'new_version' ]
    [ OPTIONS ( {[ ADD | SET | DROP ] option ['value']} [, ... ] ) ];
```
![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/figure/zh-cn_image_0000002526897378.png "点击放大")
在OPTIONS选项里，ADD、SET和DROP指定要执行的操作，未指定时默认为ADD操作。option和value为对应操作的参数。
- 修改外部服务的所有者。
```
ALTER SERVER server_name 
    OWNER TO new_owner;
```
![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/figure/zh-cn_image_0000002558057229.png "点击放大")
- 修改外部服务的名称。
```
ALTER SERVER server_name 
    RENAME TO new_name;
```
![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/figure/zh-cn_image_0000002558217195.png "点击放大")
#### 参数说明
- **server_name**
  所修改的server的名称。
  
- **new_version**
  修改后server的新版本名称。
  
- **OPTIONS**
  更改该服务器的选项。ADD、SET和DROP指定要执行的动作。如果没有显式地指定操作， 将会假定为ADD。选项名称必须唯一，名称和值也会使用该服务器的外部数据封装器库进行验证。
  
- **new_owner**
  修改后server的新拥有者。更改所有者，你必须是外部服务器的所有者并且也是新的所有者角色的直接或者间接成员，并且你必须对外部服务器的外部数据封装器有USAGE权限。
  
- **new_name**
  修改后server的新名称。
  
 
#### 示例
```
--创建my_server。
gaussdb=# CREATE SERVER my_server FOREIGN DATA WRAPPER log_fdw;
 
--修改外部服务器的名称。
gaussdb=# ALTER SERVER my_server RENAME TO my_server_1;
--创建用户。
gaussdb=# CREATE USER jack PASSWORD '********';
--修改外部服务器的所有者。
gaussdb=# ALTER SERVER my_server_1 OWNER TO jack;
--增加外部服务器中dbname、dbuser信息。
gaussdb=# ALTER SERVER my_server_1 OPTIONS(ADD dbname 'test',dbuser' test_user');
--查询外部服务器信息。
gaussdb=# SELECT * FROM pg_foreign_server WHERE srvname='my_server_1';
   srvname   | srvowner | srvfdw | srvtype | srvversion | srvacl |           srvoptions           
-------------+----------+--------+---------+------------+--------+--------------------------------
 my_server_1 |    22060 |  11826 |         |            |        | {dbname=test,"dbuser= test_user"}
(1 row)
--修改外部服务器中dbname名称为‘db_test’。
gaussdb=# ALTER SERVER my_server_1 OPTIONS (SET dbname 'db_test');
--查询外部服务器信息。
gaussdb=# SELECT srvname,srvoptions FROM pg_foreign_server WHERE srvname='my_server_1';
   srvname   |            srvoptions             
-------------+-----------------------------------
 my_server_1 | {dbname=db_test,"dbuser= test_user"}
(1 row)
--删除外部服务器中dbname信息。
gaussdb=# ALTER SERVER my_server_1 OPTIONS (DROP dbname);
--查询外部服务器信息。
gaussdb=# SELECT srvname,srvoptions FROM pg_foreign_server WHERE srvname='my_server_1';
   srvname   |     srvoptions     
-------------+--------------------
 my_server_1 | {"dbuser= test_user"}
(1 row)
--删除my_server_1。
gaussdb=# DROP SERVER my_server_1;
--删除用户。
gaussdb=# DROP USER jack;
```
#### 相关链接
[CREATE SERVER](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0565.html#ZH-CN_TOPIC_0000002527986158)，[DROP SERVER](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0615.html#ZH-CN_TOPIC_0000002558946047)
