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;
参数说明
- 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试图提供行级安全时,应使用该参数。
取值范围:boolean类型,TRUE、FALSE。
- REBUILD
该子句用于视图解耦,可使用已保存的原始语句重新创建视图,恢复依赖关系。REBUILD注意事项如下:
- 重建视图会从当前视图开始,依次向后级联刷新与其关联的所有视图,如果其依赖的前向视图也为不可用状态,会触发自动重建。
- 不支持对有依赖关系的临时表及临时视图的解耦DROP,可以对没有依赖关系的临时视图进行REBUILD操作。
- 支持视图模式名称及视图名称的修改,REBUILD按照最新的名称重建,但是query部分保留原始定义。
- 基表字段类型仅支持大类(字符型、数字型、时间类型等)范围内的修改;当基表添加字段时,视图不会置为无效,且定义不变。
- 无效视图备份时以注释形式导出,恢复时需要自行手动处理。
- GUC参数view_independent设置为on时,支持视图自动重建。
以下场景会触发上层级联视图无效:
- 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
- ONLY
控制视图重建的范围,只重建视图及其所依赖的视图。当view_independent设置为on时,此功能可正常使用。
示例
修改视图名称:
1
|
ALTER VIEW tpcds.customer_details_view_v1 RENAME TO customer_details_view_v2; |
修改视图名称,新视图名前带有原视图所在的schema名:
1
|
ALTER VIEW tpcds.customer_details_view_v1 RENAME TO tpcds.customer_details_view_v2; |
修改视图所属schema:
1
|
ALTER VIEW tpcds.customer_details_view_v2 SET schema public; |
重建视图:
1
|
ALTER VIEW public.customer_details_view_v2 REBUILD; |
重建依赖视图:
1
|
ALTER VIEW ONLY public.customer_details_view_v2 REBUILD; |