SQL COMMAND · 表与视图
ALTER VIEW
更改视图的定义
ALTER表与视图引入 10(基线)现存至 20 devel2 次语法变更
- 动词
ALTER- 对象
VIEW- 分组
- 表与视图
- 引入版本
- 10(基线)
- 状态
- 现存
- 语法变更次数
- 2
- 手册小节数
- 6
版本轨迹
相对 PostgreSQL 17 无变化。
语法铁道图 PostgreSQL 18
沿轨道从左向右阅读,分岔表示选择,绕行表示可选,回环表示重复。方框为参数,点击带下划线的参数可展开子规则。
ALTER VIEW · 语法 2
ALTER VIEW · 语法 3
ALTER VIEW · 语法 4
ALTER VIEW · 语法 5
ALTER VIEW · 语法 6
ALTER VIEW · 语法 7
ALTER VIEW · 语法 8
语法概要
ALTER VIEW [ IF EXISTS ]nameALTER [ COLUMN ]column_nameSET DEFAULTexpressionALTER VIEW [ IF EXISTS ]nameALTER [ COLUMN ]column_nameDROP DEFAULT ALTER VIEW [ IF EXISTS ]nameOWNER TO {new_owner| CURRENT_ROLE | CURRENT_USER | SESSION_USER } ALTER VIEW [ IF EXISTS ]nameRENAME [ COLUMN ]column_nameTOnew_column_nameALTER VIEW [ IF EXISTS ]nameRENAME TOnew_nameALTER VIEW [ IF EXISTS ]nameSET SCHEMAnew_schemaALTER VIEW [ IF EXISTS ]nameSET (view_option_name[=view_option_value] [, ... ] ) ALTER VIEW [ IF EXISTS ]nameRESET (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)更改视图的安全屏障属性。该值必须为布尔值,例如
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 是 PostgreSQL 对 SQL 标准的扩展。
另见
语法演化
相邻大版本之间的差异,新的在前。版本号链接到对应快照。
PostgreSQL 14← 13语法变化
+ ALTER VIEW [ IF EXISTS ] name OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }− ALTER VIEW [ IF EXISTS ] name OWNER TO { new_owner | CURRENT_USER | SESSION_USER }正文更新PostgreSQL 13← 12语法变化
+ ALTER VIEW [ IF EXISTS ] name RENAME [ COLUMN ] column_name TO new_column_name正文更新
同组命令
| 命令 | 动词 | 对象 | 版本变动 | 最近变更 |
|---|---|---|---|---|
TRUNCATE | TRUNCATE | — | — | |
| 清空一个表或一组表 | 现存 | |||
CREATE MATERIALIZED VIEW | CREATE | MATERIALIZED VIEW | 121 次 | |
| 定义一个新物化视图 | 现存 | |||
ALTER MATERIALIZED VIEW | ALTER | MATERIALIZED VIEW | 142 次 | |
| 更改一个物化视图的定义 | 现存 | |||
DROP MATERIALIZED VIEW | DROP | MATERIALIZED VIEW | — | |
| 移除一个物化视图 | 现存 | |||
REFRESH MATERIALIZED VIEW | REFRESH | MATERIALIZED VIEW | — | |
| 替换物化视图的内容 | 现存 | |||
CREATE SEQUENCE | CREATE | SEQUENCE | 141 次 | |
| 定义一个新的序列发生器 | 现存 | |||
ALTER SEQUENCE | ALTER | SEQUENCE | 141 次 | |
| 更改序列发生器的定义 | 现存 | |||
DROP SEQUENCE | DROP | SEQUENCE | — | |
| 移除一个序列 | 现存 | |||
CREATE TABLE | CREATE | TABLE | 206 次 | |
| 定义一个新表 | 现存 | |||
ALTER TABLE | ALTER | TABLE | 206 次 | |
| 更改一个表的定义 | 现存 | |||
DROP TABLE | DROP | TABLE | — | |
| 移除一个表 | 现存 | |||
CREATE TABLE AS | CREATE | TABLE AS | 192 次 | |
| 根据查询结果定义一个新表 | 现存 | |||
CREATE VIEW | CREATE | VIEW | — | |
| 定义一个新视图 | 现存 | |||
ALTER VIEW | ALTER | VIEW | 142 次 | |
| 更改视图的定义 | 现存 | |||
DROP VIEW | DROP | VIEW | — | |
| 移除一个视图 | 现存 | |||