ALTER VIEW — 更改一个视图的定义
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) 更改视图的 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 扩展。