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 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 标准扩展。