更新时间:2026-10-21 GMT+08:00
分享

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

    聚合函数的新模式。

示例

  • 修改聚合函数的名称。
    --创建自定义函数。
    gaussdb=# CREATE OR REPLACE FUNCTION int_add(int,int)
     RETURNS int AS $BODY$
    DECLARE
    BEGIN
     RETURN $1 + $2;
    END;
    $BODY$ language plpgsql;
    
    --创建聚合函数。
    gaussdb=# CREATE AGGREGATE myavg (int)
    (
        sfunc = int_add,
        stype = int,
        initcond = '0'
    );
    
    --把一个接受int类型参数的聚合函数myavg重命名为 my_average。
    gaussdb=# ALTER AGGREGATE myavg(int) RENAME TO my_average;
  • 修改聚合函数的所有者。
    --创建用户joe。
    gaussdb=# CREATE USER joe PASSWORD '********';
    
    --把一个接受int类型参数的聚合函数my_average的所有者改为joe。
    gaussdb=# ALTER AGGREGATE my_average(int) OWNER TO joe;
  • 修改聚合函数的模式。
    --创建模式myschema。
    gaussdb=# CREATE SCHEMA myschema;
    
    --把一个接受int类型参数的聚合函数my_average移动到模式myschema中。
    gaussdb=# ALTER AGGREGATE my_average(int) SET SCHEMA myschema;
    
    --删除SCHEMA,用户及相关函数。
    gaussdb=# DROP SCHEMA myschema CASCADE;
    gaussdb=# DROP USER joe;
    gaussdb=# DROP FUNCTION int_add(int,int);

兼容性

SQL标准里没有ALTER AGGREGATE语句。

相关文档