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
其中aggregate_signature
是: * | [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
语句。