
# ALTER VIEW
#### 功能描述
ALTER VIEW更改视图的各种辅助属性（如果用户是更改视图的查询定义，要使用CREATE OR REPLACE VIEW）。
#### 注意事项
只有视图的所有者或者被授予了视图ALTER权限的用户才可以执行ALTER VIEW命令，三权分立开关关闭时，系统管理员默认拥有该权限。针对所要修改属性的不同，对其还有以下权限约束：
- 修改视图的模式，当前用户必须是视图的所有者或者系统管理员，且要有新模式的CREATE权限。三权分立开关打开时，系统管理员不能修改视图模式。
- 修改视图的所有者，当前用户必须是视图的所有者或者系统管理员，且该用户必须是新所有者角色的成员，并且此角色必须有视图所在模式的CREATE权限。三权分立开关打开时，系统管理员不能修改视图的所有者。
- 禁止修改视图中列的类型。
 
#### 语法格式
- 设置视图列的默认值。
  ```
  ALTER VIEW [ IF EXISTS ] view_name
      ALTER [ COLUMN ] column_name SET DEFAULT expression;
  ```
  ![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/figure/zh-cn_image_0000002558217203.png "点击放大")
  
- 取消列视图列的默认值。
  ```
  ALTER VIEW [ IF EXISTS ] view_name
      ALTER [ COLUMN ] column_name DROP DEFAULT;
  ```
  ![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/figure/zh-cn_image_0000002558217201.png "点击放大")
  
- 修改视图的所有者。
  ```
  ALTER VIEW [ IF EXISTS ] view_name 
      OWNER TO new_owner;
  ```
  ![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/figure/zh-cn_image_0000002558057233.png "点击放大")
  
- 重命名视图。
  ```
  ALTER VIEW [ IF EXISTS ] view_name 
      RENAME TO new_name;
  ```
  ![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/figure/zh-cn_image_0000002526897384.png "点击放大")
  
- 设置视图的所属模式。
  ```
  ALTER VIEW [ IF EXISTS ] view_name 
      SET SCHEMA new_schema;
  ```
  ![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/figure/zh-cn_image_0000002527057348.png "点击放大")
  
- 设置视图的选项。
  ```
  ALTER VIEW [ IF EXISTS ] view_name
      SET ( { view_option_name [ = view_option_value ] } [, ... ] );
  ```
  ![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/figure/zh-cn_image_0000002526897386.png "点击放大")
  
- 重置视图的选项。
  ```
  ALTER VIEW [ IF EXISTS ] view_name
      RESET ( view_option_name [, ... ] );
  ```
  ![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/figure/zh-cn_image_0000002558057235.png "点击放大")
  
 
#### 参数说明
- **IF EXISTS**
  使用这个选项，如果视图不存在时不会产生错误，仅会有一个提示信息。
  
- **view_name**
  视图名称，可以用模式修饰。
  取值范围：字符串，已经存在的视图名。
  
- **column_name**
  字段名称。
  取值范围：字符串，已经存在的视图的字段名。
  
- **SET/DROP DEFAULT**
  设置或删除一个列的缺省值，该参数暂无实际意义。
  
- **new_owner**
  视图新所有者的用户名称。
  
- **new_name**
  视图的新名称。
  
- **new_schema**
  视图的新模式。
  
- **view_option_name \[ = view_option_value \]**
  该子句为视图指定一个可选的参数。
  - security_barrier：设置视图是否提供行级安全。取值范围为Boolean类型。缺省值为true。
  
  - check_option：控制更新视图的行为。支持参数值为CASCADED或LOCAL。该参数取值不可缺省。
   
- **expression**
  常量、函数或SQL表达式。
  
 
#### 示例
- 重命名视图。
  ```
  --创建test_tbl表。
  gaussdb=# CREATE TABLE test_tb1(col1 INT,col2 INT);
  --创建视图。
  gaussdb=# CREATE VIEW abc AS SELECT * FROM test_tb1;
  --设置视图列的默认值为100。
  gaussdb=# ALTER VIEW IF EXISTS  abc ALTER  COLUMN  col1 SET DEFAULT 100;
  --取消视图列的默认值。
  gaussdb=# ALTER VIEW IF EXISTS  abc ALTER  COLUMN  col1 DROP DEFAULT;
  --重命名视图。
  gaussdb=# ALTER VIEW IF EXISTS abc RENAME TO test_v1;
  --查看视图。
  gaussdb=# \dv
               List of relations
   Schema |  Name   | Type | Owner | Storage 
  --------+---------+------+-------+---------
   public | test_v1 | view | omm   | 
  (1 row)
  ```
  
- 修改视图所有者。
  ```
  --创建用户。
  gaussdb=# CREATE ROLE role_test PASSWORD '********';
  --修改视图所有者。
  gaussdb=# ALTER VIEW IF EXISTS test_v1 OWNER TO role_test;
  --查看视图信息。
  gaussdb=# \dv
                 List of relations
   Schema |  Name   | Type |   Owner   | Storage 
  --------+---------+------+-----------+---------
   public | test_v1 | view | role_test | 
  (1 row)
  ```
  
- 设置视图所属模式。
  ```
  --创建模式。
  gaussdb=# CREATE SCHEMA tcpds;
  --修改视图所属模式。
  gaussdb=# ALTER VIEW test_v1 SET SCHEMA tcpds;
  --查看视图信息。
  gaussdb=# \dv tcpds.test_v1;
                 List of relations
   Schema |  Name   | Type |   Owner   | Storage 
  --------+---------+------+-----------+---------
   tcpds  | test_v1 | view | role_test | 
  (1 row)
  ```
  
- 设置与重置视图选项。
  ```
  --修改视图选项。
  gaussdb=# ALTER VIEW tcpds.test_v1 SET (security_barrier = TRUE);
  ALTER VIEW
  --查看。
  gaussdb=# \dv tcpds.test_v1
                         List of relations
   Schema |  Name   | Type |   Owner   |         Storage         
  --------+---------+------+-----------+-------------------------
   tcpds  | test_v1 | view | role_test | {security_barrier=true}
  (1 row)
  --修改check_option选项。
  gaussdb=# ALTER VIEW tcpds.test_v1 SET (check_option = 'LOCAL');
  --查看。
  gaussdb=# \dv tcpds.test_v1
                                  List of relations
   Schema |  Name   | Type |   Owner   |                  Storage                   
  --------+---------+------+-----------+--------------------------------------------
   tcpds  | test_v1 | view | role_test | {security_barrier=true,check_option=LOCAL}
  (1 row)
  --重置视图选项。
  gaussdb=# ALTER VIEW tcpds.test_v1 RESET (security_barrier);
  ALTER VIEW
  gaussdb=# ALTER VIEW tcpds.test_v1 RESET (check_option);
  ALTER VIEW
  --查看。
  gaussdb=# \dv tcpds.test_v1
                 List of relations
   Schema |  Name   | Type |   Owner   | Storage 
  --------+---------+------+-----------+---------
   tcpds  | test_v1 | view | role_test | 
  (1 row)
  --删除视图test_v1。
  gaussdb=# DROP VIEW tcpds.test_v1;
  DROP VIEW
  --删除表test_tb1。
  gaussdb=# DROP TABLE test_tb1;
  DROP TABLE
  --删除用户。
  gaussdb=# DROP ROLE role_test;
  DROP ROLE
  --删除schema。
  gaussdb=# DROP SCHEMA tcpds;
  DROP SCHEMA
  ```
  
 
#### 相关链接
[CREATE VIEW](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0576.html#ZH-CN_TOPIC_0000002527826218)，[DROP VIEW](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0624.html#ZH-CN_TOPIC_0000002558946051)
