更新时间:2025-07-10 GMT+08:00
分享

ALTER VIEW

功能描述

ALTER VIEW更改视图的各种辅助属性。(如果用户是更改视图的查询定义,要使用CREATE OR REPLACE VIEW。)

注意事项

  • 用户必须是视图的所有者才可以执行ALTER VIEW。
  • 要修改视图的模式,用户必须要有新模式的CREATE权限。
  • 要修改视图的所有者,用户必须是新所属角色的直接或者间接的成员,并且此角色必须有视图模式的CREATE权限。
  • 管理员用户可以更改任何视图的所属关系。

语法格式

  • 设置视图列的默认值。
    1
    2
    ALTER VIEW [ IF EXISTS ] view_name
        ALTER [ COLUMN ] column_name SET DEFAULT expression;
    
  • 取消列视图列的默认值。
    1
    2
    ALTER VIEW [ IF EXISTS ] view_name
        ALTER [ COLUMN ] column_name DROP DEFAULT;
    
  • 修改视图的所有者。
    1
    2
    ALTER VIEW [ IF EXISTS ] view_name 
        OWNER TO new_owner;
    
  • 重命名视图,支持新视图名前带有原视图所在的schema名,不支持同时修改schema名。
    1
    2
    3
    4
    ALTER VIEW [ IF EXISTS ] view_name 
        RENAME TO new_name;
    ALTER VIEW [ IF EXISTS ] view_name 
        RENAME TO schema.new_name;
    
  • 设置视图的所属模式。
    1
    2
    ALTER VIEW [ IF EXISTS ] view_name 
        SET SCHEMA new_schema;
    
  • 设置视图的选项。
    1
    2
    ALTER VIEW [ IF EXISTS ] view_name
        SET ( { view_option_name [ = view_option_value ] } [, ... ] );
    
  • 重置视图的选项。
    1
    2
    ALTER VIEW [ IF EXISTS ] view_name
        RESET ( view_option_name [, ... ] );
    
  • 重建本视图及上层和下层依赖的无效视图。
    1
    2
    ALTER VIEW [ IF EXISTS ] view_name
        REBUILD;
    
  • 重建本视图及下层依赖的视图。
    1
    2
    ALTER VIEW [ IF EXISTS ] ONLY view_name
        REBUILD;
    

参数说明

表1 ALTER VIEW参数说明

参数

描述

取值范围

IF EXISTS

如果视图不存在时返回一个提示而不是错误。

-

view_name

需要修改的视图的名称,可以用模式修饰。

有效的视图名。

column_name

可选的名称列表,视图的字段名。如果没有给出,字段名取自查询中的字段名。

有效的字段名。

SET/DROP DEFAULT

设置或删除一个列的缺省值,该参数暂无实际意义。

-

new_owner

视图的新所有者。

有效的用户名。

new_name

视图的新名称。

字符串,需符合标识符命名规范

new_schema

视图的新模式。

有效的模式名。

view_option_name [ = view_option_value ]

该子句为视图指定一个可选的参数。

目前view_option_name支持的参数仅有security_barrier,当VIEW试图提供行级安全时,应使用该参数。

security_barrier为boolean类型:

  • TRUE
  • FALSE

REBUILD

该子句用于视图解耦,可使用已保存的原始语句重新创建视图,恢复依赖关系。9.1.0.200及以上集群版本中,视图解耦功能无需打开view_independent开关,检测视图如果为无效状态,则可以进行重建。

REBUILD的详细使用说明请参见REBUILD使用说明

ONLY

控制视图重建的范围,只重建视图及其所依赖的视图。此功能无需打开view_independent开关,检测视图如果为无效状态,则可以进行重建。

-

REBUILD使用说明

  • 重建视图会从当前视图开始,依次向后级联刷新与其关联的所有视图,如果其依赖的前向视图也为不可用状态,会触发自动重建。
  • 不支持对有依赖关系的临时表及临时视图的解耦DROP,可以对没有依赖关系的临时视图进行REBUILD操作。
  • 支持视图模式名称及视图名称的修改,REBUILD按照最新的名称重建,但是query部分保留原始定义。
  • 基表字段类型仅支持大类(字符型、数字型、时间类型等)范围内的修改;当基表添加字段时,视图不会置为无效,且定义不变。
  • 无效视图备份时以注释形式导出,恢复时需要自行手动处理。

    以下场景会触发上层级联视图无效:

    • DROP TABLE/VIEW
    • RENAME TABLE/VIEW
    • ALTER TABLE DROP COLUMN
    • ALTER TABLE CHANGE/ALTER COLUMN TYPE
    • ALTER TABLE CHANGE/ALTER COLUMN NAME
    • ALTER TABLE/VIEW NAMESPACE
    • ALTER TABLE/VIEW RENAME

示例

创建示例视图myview。

1
2
CREATE OR REPLACE VIEW myview AS
    SELECT * FROM pg_tablespace WHERE spcname = 'pg_default';

修改视图名称。

1
ALTER VIEW myview RENAME TO product_view;

修改视图所属schema。

1
ALTER VIEW product_view SET schema public;

重建视图。

1
ALTER VIEW public.product_view REBUILD;

重建依赖视图。

1
ALTER VIEW ONLY public.product_view REBUILD;

相关链接

CREATE VIEWDROP VIEW

相关文档