=============== ALTER AGGREGATE =============== .. container:: refentry :name: SQL-ALTERAGGREGATE .. container:: titlepage .. container:: refnamediv .. rubric:: ALTER AGGREGATE :name: alter-aggregate ALTER AGGREGATE — 更改一个聚集函数的定义 .. container:: refsynopsisdiv .. rubric:: 大纲 :name: 大纲 .. code:: synopsis ALTER AGGREGATE name ( aggregate_signature ) RENAME TO new_name ALTER AGGREGATE name ( aggregate_signature ) OWNER TO { new_owner | CURRENT_USER | SESSION_USER } ALTER AGGREGATE name ( aggregate_signature ) SET SCHEMA new_schema 其中 aggregate_signature 是: * | [ argmode ] [ argname ] argtype [ , ... ] | [ [ argmode ] [ argname ] argtype [ , ... ] ] ORDER BY [ argmode ] [ argname ] argtype [ , ... ] .. container:: refsect1 :name: id-1.9.3.4.5 .. rubric:: 描述 :name: 描述 ``ALTER AGGREGATE``\ 更改一个聚集函数的定义。 要使用\ ``ALTER AGGREGATE``\ ,你必须拥有该聚集函数。 要更改一个聚集函数的模式,你还必须具有新模式上的 ``CREATE``\ 特权。要修改拥有者,你还必须是新拥有角色 的一个直接或者间接成员,并且那个角色必须在聚集函数的模式上拥有 ``CREATE``\ 特权(这些限制强制要求拥有者不能通过丢弃并重建该聚集函数来做任何你不能做的事情。不过,一个超级用户可以更改任何聚集函数的所有权)。 .. container:: refsect1 :name: id-1.9.3.4.6 .. rubric:: 参数 :name: 参数 .. container:: variablelist ``name`` 一个现有聚集函数的名称(可以是模式限定的)。 ``argmode`` 一个参数的模式:\ ``IN``\ 或\ ``VARIADIC``\ 。 如果省略,默认为\ ``IN``\ 。 ``argname`` 一个参数的名称。注意\ ``ALTER AGGREGATE`` 并不真正关心参数名称,因为决定聚集函数的身份时只需要参数的数据类型。 ``argtype`` 聚集函数要在其上操作的输入数据类型。要引用一个零参数聚集函数,在参数 说明列表的位置写上\ ````\ 。要引用一个有序集聚集函数,在直接参数 说明和聚集参数说明之间写上\ ``ORDER BY``\ 。 ``new_name`` 聚集函数的新名称。 ``new_owner`` 聚集函数的新拥有者。 ``new_schema`` 聚集函数的新模式。 .. container:: refsect1 :name: id-1.9.3.4.7 .. rubric:: 注解 :name: 注解 引用有序集聚集的推荐语法是在直接参数说明和聚集参数说明之间写上 ``ORDER BY``\ ,这和\ `CREATE AGGREGATE `__ 中的风格相同。不过,省略\ ``ORDER BY``\ 并且只把直接和 聚集参数说明放到一个单一列表中也是可以的。在这种简写形式中,如果 在直接和聚集参数列表中都使用了\ ``VARIADIC "any"``\ ,只用 写一次\ ``VARIADIC "any"``\ 。 .. container:: refsect1 :name: id-1.9.3.4.8 .. rubric:: 示例 :name: 示例 要把用于类型\ ``integer``\ 的聚集函数 ``myavg``\ 重命名为\ ``my_average``\ : .. code:: programlisting ALTER AGGREGATE myavg(integer) RENAME TO my_average; 要把用于类型\ ``integer``\ 的聚集函数 ``myavg``\ 的拥有者改为\ ``joe``\ : .. code:: programlisting ALTER AGGREGATE myavg(integer) OWNER TO joe; 把带有\ ``float8``\ 类型直接参数和\ ``integer`` 类型聚集参数的有序集聚集\ ``mypercentile`` 移动到 模式\ ``myschema``\ 中: .. code:: programlisting ALTER AGGREGATE mypercentile(float8 ORDER BY integer) SET SCHEMA myschema; 这也能行: .. code:: programlisting ALTER AGGREGATE mypercentile(float8, integer) SET SCHEMA myschema; .. container:: refsect1 :name: id-1.9.3.4.9 .. rubric:: 兼容性 :name: 兼容性 在 SQL 标准中没有\ ``ALTER AGGREGATE``\ 语句。 .. container:: refsect1 :name: id-1.9.3.4.10 .. rubric:: 另见 :name: 另见 `CREATE AGGREGATE `__, `DROP AGGREGATE `__