登录
ALTER VIEW
ALTER VIEW — 更改视图的定义
语法
ALTER VIEW [ IF EXISTS ] name ALTER [ COLUMN ] column_name SET DEFAULT expression
ALTER VIEW [ IF EXISTS ] name ALTER [ COLUMN ] column_name DROP DEFAULT
ALTER VIEW [ IF EXISTS ] name OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
ALTER VIEW [ IF EXISTS ] name RENAME [ COLUMN ] column_name TO new_column_name
ALTER VIEW [ IF EXISTS ] name RENAME TO new_name
ALTER VIEW [ IF EXISTS ] name SET SCHEMA new_schema
ALTER VIEW [ IF EXISTS ] name SET ( view_option_name [= view_option_value] [, ... ] )
ALTER VIEW [ IF EXISTS ] name RESET ( view_option_name [, ... ] )
描述
ALTER VIEW
更改视图的各种辅助属性。(如果要修改视图的定义查询,请使用CREATE OR REPLACE VIEW
。)
您必须拥有视图才能使用ALTER VIEW
。要更改视图的架构,您还必须对新架构拥有CREATE
权限。要更改所有者,您必须能够将SET ROLE
设置为新的所有者角色,并且该角色必须对视图的架构拥有CREATE
权限。(这些限制强制要求更改所有者不会执行通过删除和重新创建视图无法执行的操作。但是,超级用户无论如何都可以更改任何视图的所有权。)
参数
name
现有视图的名称(可选架构限定)。
列名
现有列的名称。
new_column_name
现有列的新名称。
IF EXISTS
如果视图不存在,则不抛出错误。在这种情况下会发出通知。
SET
/DROP DEFAULT
这些形式设置或删除列的默认值。视图列的默认值替换到任何目标为该视图的
INSERT
或UPDATE
命令中,在应用该视图的任何规则或触发器之前。因此,视图的默认值将优先于底层关系的任何默认值。new_owner
视图新所有者的用户名。
new_name
视图的新名称。
new_schema
视图的新架构。
SET (
view_option_name
[=view_option_value
] [, ... ] )RESET (
view_option_name
[, ... ] )设置或重置视图选项。当前支持的选项为
check_option
(enum
)更改视图的检查选项。该值必须为
local
或cascaded
。security_barrier
(boolean
)更改视图的安全屏障属性。该值必须为布尔值,例如
true
或false
。security_invoker
(boolean
)更改视图的安全调用方属性。该值必须为布尔值,例如
true
或false
。
备注
由于历史原因,ALTER TABLE
也可以与视图一起使用;但ALTER TABLE
允许与视图一起使用的唯一变体等效于上面显示的变体。
示例
将视图foo
重命名为bar
ALTER VIEW foo RENAME TO bar;
将默认列值附加到可更新视图
CREATE TABLE base_table (id int, ts timestamptz);
CREATE VIEW a_view AS SELECT * FROM base_table;
ALTER VIEW a_view ALTER COLUMN ts SET DEFAULT now();
INSERT INTO base_table(id) VALUES(1); -- ts will receive a NULL
INSERT INTO a_view(id) VALUES(2); -- ts will receive the current time
兼容性
ALTER VIEW
是 SQL 标准的PostgreSQL扩展。