PostgreSQL 中文参考文档
🌐 英文原版 官方 ↗

ALTER VIEW

ALTER VIEW — 更改一个视图的定义

Synopsis

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

一个现有视图的名称(可选择用模式限定)。

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)

更改视图的 security-barrier 属性。该值必须是一个布尔值,例如 true 或 false。

security_invoker (boolean)

更改视图的 security-invoker 属性。该值必须是一个布尔值,例如 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 扩展。

另请参阅

CREATE VIEW, DROP VIEW