阅读(728)
赞(12)
PostgreSQL ALTER VIEW
2021-08-23 14:26:47 更新
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_USER | SESSION_USER }
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
特权。要更改拥有者,你还必须 是新拥有角色的一个直接或者间接成员,并且该角色必须具有该视图的模式上的 CREATE
特权(这些限制强制修改拥有者不能做一些通过删除和重 建视图做不到的事情。不过,一个超级用户怎么都能更改任何视图的所有权。)。
参数
name
-
一个现有视图的名称(可以是模式限定的)。
column_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
。
注解
由于历史原因,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
是一种PostgreSQL
的 SQL 标准扩展。