========== ALTER VIEW ========== .. container:: refentry :name: SQL-ALTERVIEW .. container:: titlepage .. container:: refnamediv .. rubric:: ALTER VIEW :name: alter-view ALTER VIEW — 更改一个视图的定义 .. container:: refsynopsisdiv .. rubric:: 大纲 :name: 大纲 .. code:: 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_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 [, ... ] ) .. container:: refsect1 :name: id-1.9.3.45.5 .. rubric:: 描述 :name: 描述 ``ALTER VIEW``\ 更改一个视图的多种辅助属性(如果想要 修改视图的查询定义,应使用\ ``CREATE OR REPLACE VIEW``\ )。 要使用\ ``ALTER VIEW``\ ,你必须拥有该视图。要更改一个视图的模式, 你还必须具有新模式上的\ ``CREATE``\ 权限。要更改拥有者,你还必须 是新拥有角色的一个直接或者间接成员,并且该角色必须具有该视图的模式上的 ``CREATE``\ 权限(这些限制强制修改拥有者不能做一些通过删除和重 建视图做不到的事情。不过,一个超级用户怎么都能更改任何视图的所有权。)。 .. container:: refsect1 :name: id-1.9.3.45.6 .. rubric:: 参数 :name: 参数 .. container:: variablelist ``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`` [, ... ] ) 设置或者重置一个视图选项。当前支持的选项有: .. container:: variablelist ``check_option`` (``string``) 更改该视图的检查选项。值必须是\ ``local`` 或者\ ``cascaded``\ 。 ``security_barrier`` (``boolean``) 更改该视图的安全屏障属性。值必须是一个布尔值,如 ``true``\ 或者\ ``false``\ 。 .. container:: refsect1 :name: id-1.9.3.45.7 .. rubric:: 注解 :name: 注解 由于历史原因,\ ``ALTER TABLE``\ 也可以用于视图,但是 只允许等效于以上形式的\ ``ALTER TABLE``\ 变体用于视图。 .. container:: refsect1 :name: id-1.9.3.45.8 .. rubric:: 示例 :name: 示例 把视图\ ``foo``\ 重命名为 ``bar``\ : .. code:: programlisting ALTER VIEW foo RENAME TO bar; 要为一个可更新视图附加一个默认列值: .. code:: programlisting 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 .. container:: refsect1 :name: id-1.9.3.45.9 .. rubric:: 兼容性 :name: 兼容性 ``ALTER VIEW``\ 是一种 OushuDB 的 SQL 标准扩展。 .. container:: refsect1 :name: id-1.9.3.45.10 .. rubric:: 另见 :name: 另见 `CREATE VIEW `__, `DROP VIEW `__