ALTER AGGREGATE

ALTER AGGREGATE更改一个聚集函数的定义。

简介

要使用ALTER AGGREGATE,你必须拥有该聚集函数。 要更改一个聚集函数的模式,你还必须具有新模式上的 CREATE特权。要修改拥有者,你还必须是新拥有角色的一个直接或者间接成员,并且那个角色必须在聚集函数的模式上拥有 CREATE特权(这些限制强制要求拥有者不能通过丢弃并重建该聚集函数来做任何你不能做的事情。不过,一个超级用户可以更改任何聚集函数的所有权)。

语法

    ALTER AGGREGATE name ( aggregate_signature ) RENAME TO new_name
    ALTER AGGREGATE name ( aggregate_signature )
                    OWNER TO { new_owner | CURRENT_USER | SESSION_USER }
    ALTER AGGREGATE name ( aggregate_signature ) SET SCHEMA new_schema

    其中 aggregate_signature 是:

    * |
    [ argmode ] [ argname ] argtype [ , ... ] |
    [ [ argmode ] [ argname ] argtype [ , ... ] ] ORDER BY [ argmode ] [ argname ] argtype [ , ... ]

参数

name一个现有聚集函数的名称(可以是模式限定的)。

argmode一个参数的模式:INVARIADIC。 如果省略,默认为IN

argname一个参数的名称。注意ALTER AGGREGATE 并不真正关心参数名称,因为决定聚集函数的身份时只需要参数的数据类型。

argtype聚集函数要在其上操作的输入数据类型。要引用一个零参数聚集函数,在参数说明列表的位置写上。要引用一个有序集聚集函数,在直接参数说明和聚集参数说明之间写上ORDER BY

new_name聚集函数的新名称。

new_owner聚集函数的新拥有者。

new_schema聚集函数的新模式。

说明

引用有序集聚集的推荐语法是在直接参数说明和聚集参数说明之间写上 ORDER BY,这和 CREATE AGGREGAT 中的风格相同。不过,省略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;