ALTER AGGREGATE — 更改聚合函数的定义
ALTER AGGREGATEname
(aggregate_signature
) RENAME TOnew_name
ALTER AGGREGATEname
(aggregate_signature
) OWNER TO {new_owner
| CURRENT_ROLE | CURRENT_USER | SESSION_USER } ALTER AGGREGATEname
(aggregate_signature
) SET SCHEMAnew_schema
whereaggregate_signature
is: * | [argmode
] [argname
]argtype
[ , ... ] | [ [argmode
] [argname
]argtype
[ , ... ] ] ORDER BY [argmode
] [argname
]argtype
[ , ... ]
ALTER AGGREGATE
更改聚合函数的定义。
您必须拥有使用 ALTER AGGREGATE
的聚合函数。要更改聚合函数的架构,您还必须以新架构为依据拥有 CREATE
权限。要更改所有者,您必须能够将 SET ROLE
设置为新的所有者角色,该角色必须拥有对聚合函数架构的 CREATE
权限。(这些限制强制更改所有者无法通过删除和重建聚合函数来完成任何事项。但是,超级用户可以随意更改任何聚合函数的所有权。)
名称
现有聚合函数的名称(可选架构限定)。
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
语句。