PostgreSQL 9.4.4 中文手册
上一页 | 上一级 |  | 下一页

# ALTER AGGREGATE

## 名称

ALTER AGGREGATE -- 修改一个聚合函数的定义

## 大纲

    ALTER AGGREGATE name ( aggregate_signature ) RENAME TO new_name
    ALTER AGGREGATE name ( aggregate_signature ) OWNER TO new_owner
    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;

要移动带有`float8`类型直接参数和`integer` 类型聚合参数的有序集聚合`mypercentile`到模式 `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

上一页 | 起始页 | 下一页
ABORT | 上一级 | ALTER COLLATION