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
一個參數的模式:IN
或VARIADIC
。 如果省略,默認為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;