PostgreSQL 中文参考文档
🌐 英文原版 官方 ↗

ALTER AGGREGATE

ALTER AGGREGATE — 修改聚集函数的定义

Synopsis

ALTER AGGREGATE name ( aggregate_signature ) RENAME TO new_name
ALTER AGGREGATE name ( aggregate_signature )
                OWNER TO { new_owner | CURRENT_ROLE | 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 特权。要更改所有者,你必须能够 SET ROLE 到新的拥有角色,并且该角色必须在聚集函数所在模式上拥有 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