ALTER AGGREGATE

修改聚合函数的定义

概要

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>

where <aggregate_signature> is:

* |
[ <argmode> ] [ <argname> ] <argtype> [ , ... ] |
[ [ <argmode> ] [ <argname> ] <argtype> [ , ... ] ] ORDER BY [ <argmode> ] [ <argname> ] <argtype> [ , ... ]

描述

ALTER AGGREGATE 用来修改一个聚集函数的定义

你必须是该聚集函数的所有者才能使用 ALTER AGGREGATE. 要更改聚集函数的模式, 你还必须拥有新模式的 CREATE 权限。要更改聚集函数的所有者,你还必须是新角色的直接或者成员,而且新角色必须在聚集函数的模式上面拥有 CREATE 权限。(这些限制强制要求拥有者不能通过丢弃并重建该聚集函数来做任何不能做的事情。然而,超级用户可以改变任何聚合函数的所有权。)

参数

  • name
    • 现有聚合函数的名称(可选带模式限定)。
  • argmode
    • 参数模式:IN 或 VARIADIC。若省略,默认为 IN。
  • argname
    • 参数名称。需注意 ALTER AGGREGATE 实际并不关注参数名称,因仅需参数数据类型即可确定聚合函数的身份。
  • argtype
    • 聚合函数操作的输入数据类型。引用零参数聚合函数时,用 * 替代参数列表;引用有序集聚合函数时,在直接参数与聚合参数之间添加 ORDER BY 语句。
  • new_name
    • 聚合函数的新名称。
  • new_owner
    • 聚合函数的新所有者。
  • new_schema
    • 聚合函数的新模式。

注意

引用有序集合聚合的推荐语法是在直接参数和聚合参数规范之间写入ORDER BY,其风格与CREATE AGGREGATE中的用法一致。但省略 ORDER BY 并直接将直接参数和聚合参数规范合并为单一列表的形式同样有效。在这种简写形式中,若直接参数列表和聚合参数列表均使用了VARIADIC “any”,则仅需编写一次VARIADIC “any”

示例

integer 类型的聚集函数 myavg 重命名为 my_average:

ALTER AGGREGATE myavg(integer) RENAME TO my_average;

将 integer 类型的聚集函数 myavg 的所有者改为 joe:

ALTER AGGREGATE myavg(integer) OWNER TO joe;

将有序集合聚合函数mypercentile(直接参数类型为float8,聚合参数类型为integer)移入模式myschema

ALTER AGGREGATE mypercentile(float8 ORDER BY integer) SET SCHEMA myschema;

以下语法同样有效:

ALTER AGGREGATE mypercentile(float8, integer) SET SCHEMA myschema;

兼容性

SQL标准中没有ALTER AGGREGATE 语句。

另见

CREATE AGGREGATE, DROP AGGREGATE