GaussDB-ALTER VIEW

66 阅读3分钟

GaussDB-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://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/2f888e9e019e45939180012b3fc3504c~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgamVycnl3YW5nMTk4Mw==:q75.awebp?rk3s=f64ab15b&x-expires=1771984020&x-signature=pyws1fB5EOlt3BUvmGy1r4vo52o%3D)
    
    
  • 取消列视图列的默认值。

    | ``` ALTER VIEW [ IF EXISTS ] view_name ALTER [ COLUMN ] column_name DROP DEFAULT;

    | ------------------------------------------------------------------------------------------ |
    
    ![](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/c24d612b0e304e4ca640207be2a96a8d~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgamVycnl3YW5nMTk4Mw==:q75.awebp?rk3s=f64ab15b&x-expires=1771984020&x-signature=bNrqVw41irPWCMqvnQLwchl4wy8%3D)
    
    
  • 修改视图的所有者。

    | ``` ALTER VIEW [ IF EXISTS ] view_name OWNER TO new_owner;

    | -------------------------------------------------------------------- |
    
    ![](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/904aa2fc8b9c43c8943e59782b25c24e~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgamVycnl3YW5nMTk4Mw==:q75.awebp?rk3s=f64ab15b&x-expires=1771984020&x-signature=fGiKUYo3YJJj8NzjFxj6kUGa2yE%3D)
    
    
  • 重命名视图。

    | ``` ALTER VIEW [ IF EXISTS ] view_name RENAME TO new_name;

    | -------------------------------------------------------------------- |
    
    ![](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/2d97835c97b347db9f858b973648834d~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgamVycnl3YW5nMTk4Mw==:q75.awebp?rk3s=f64ab15b&x-expires=1771984020&x-signature=9ji3v%2F27X4zlFnIb32Ez6GLIEKM%3D)
    
    
  • 设置视图的所属模式。

    | ``` ALTER VIEW [ IF EXISTS ] view_name SET SCHEMA new_schema;

    | ----------------------------------------------------------------------- |
    
    ![](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/e9bf087118ed42319f3227877df43e38~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgamVycnl3YW5nMTk4Mw==:q75.awebp?rk3s=f64ab15b&x-expires=1771984020&x-signature=ZYuuLJRdBYeG47p%2BCnyYOB9G2nw%3D)
    
    
  • 设置视图的选项。

    | ``` ALTER VIEW [ IF EXISTS ] view_name SET ( { view_option_name [ = view_option_value ] } [, ... ] );

    | -------------------------------------------------------------------------------------------------------------- |
    
    ![](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/a79b689d5d2e4874b8dc454b9257fe7e~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgamVycnl3YW5nMTk4Mw==:q75.awebp?rk3s=f64ab15b&x-expires=1771984020&x-signature=j7KJLDYF8p9CDYoBxiwbn62B6Sk%3D)
    
    
  • 重置视图的选项。

    | ``` ALTER VIEW [ IF EXISTS ] view_name RESET ( view_option_name [, ... ] );

    | ------------------------------------------------------------------------------------ |
    
    ![](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/98f02c8337c946b9bf78fabd8e551147~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgamVycnl3YW5nMTk4Mw==:q75.awebp?rk3s=f64ab15b&x-expires=1771984020&x-signature=hN8A0p0C7caw4mdkLWrG4qvV6F4%3D)
    
参数说明
  • 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;
    
    --重命名视图。
    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 | chenxi | {security_barrier=true}
    (1 row)
    
    --修改check_option选项。
    gaussdb=# ALTER VIEW tcpds.test_v1 SET (check_option = 'LOCAL');
    ALTER VIEW
    
    --查看。
    gaussdb=# \dv tcpds.test_v1;
                                   List of relations
     Schema |  Name   | Type | Owner  |                  Storage
    --------+---------+------+--------+--------------------------------------------
     tcpds  | test_v1 | view | chenxi | {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 | chenxi |
    (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 VIEWDROP VIEW

更多详情请参考GaussDB 文档中心:doc.hcs.huawei.com/db/zh-cn/ga…