ALTER AGGREGATE
功能描述
修改一个聚合函数的定义。
注意事项
- 要使用 ALTER AGGREGATE ,用户必须是该聚合函数的所有者。
- 要改变一个聚合函数的模式,用户必须在新模式上有 CREATE 权限。
要改变所有者,用户必须是新所有角色的一个直接或间接成员,并且该角色必须在聚合函数的模式上有 CREATE 权限。
如上限制保证了修改该所有者时,只能做通过删除和重建聚合函数能做的事情。不过,具有SYSADMIN权限的用户可以用任何方法任意更改聚合函数的所属关系。
语法格式
ALTER AGGREGATE name ( argtype [ , ... ] ) RENAME TO new_name
ALTER AGGREGATE name ( argtype [ , ... ] ) OWNER TO new_owner
ALTER AGGREGATE name ( argtype [ , ... ] ) SET SCHEMA new_schema
参数说明
name
现有的聚合函数的名称(可以有模式修饰)。
argtype
聚合函数操作的输入数据类型。要引用一个零参数聚合函数,可以写入*代替输入数据类型列表。
new_name
聚合函数的新名字。
new_owner
聚合函数的新所有者。
new_schema
聚合函数的新模式。
示例
1、在创建聚集函数之前,创建两个被用作该函数的SFUNC和PREFUNC函数的函数。
CREATE FUNCTION mysfunc_accum(numeric, numeric, numeric)
RETURNS numeric
AS 'select $1 + $2 + $3'
LANGUAGE SQL
IMMUTABLE
RETURNS NULL ON NULL INPUT;
CREATE FUNCTION mypre_accum(numeric, numeric )
RETURNS numeric
AS 'select $1 + $2'
LANGUAGE SQL
IMMUTABLE
RETURNS NULL ON NULL INPUT;
2、创建将两列相加的聚集函数。
CREATE AGGREGATE agg_prefunc(numeric, numeric) (
SFUNC = mysfunc_accum,
STYPE = numeric,
PREFUNC = mypre_accum,
INITCOND = 0 );
3、修改聚合函数agg_prefunc重命名为my_agg_prefunc:
ALTER AGGREGATE agg_prefunc(numeric, numeric) RENAME TO my_agg_prefunc;
4、把聚合函数my_agg_prefunc的所有者,如下命令以joe为例:
CREATE ROLE joe WITH PASSWORD 'Abcd@123';
ALTER AGGREGATE my_agg_prefunc(numeric, numeric) OWNER TO joe;
5、把聚合函数my_agg_prefunc移动到指定模式中,如下命令以myschema为例:
CREATE SCHEMA myschema;
ALTER AGGREGATE my_agg_prefunc(numeric, numeric) SET SCHEMA myschema;
兼容性
SQL标准里没有ALTER AGGREGATE语句。