ALTER AGGREGATE — 修改聚集函数的定义
ALTER AGGREGATEname(aggregate_signature) RENAME TOnew_nameALTER AGGREGATEname(aggregate_signature) OWNER TO {new_owner| CURRENT_ROLE | CURRENT_USER | SESSION_USER } ALTER AGGREGATEname(aggregate_signature) SET SCHEMAnew_schemawhereaggregate_signatureis: * | [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 语句。