?
This document uses PHP Chinese website manual Release
ALTER FUNCTION name ( [ [ argmode ] [ argname ] argtype [, ...] ] )
action [ ... ] [ RESTRICT ]
ALTER FUNCTION name ( [ [ argmode ] [ argname ] argtype [, ...] ] )
RENAME TO new_name
ALTER FUNCTION name ( [ [ argmode ] [ argname ] argtype [, ...] ] )
OWNER TO new_owner
ALTER FUNCTION name ( [ [ argmode ] [ argname ] argtype [, ...] ] )
SET SCHEMA new_schema
where action is one of:這里的action是如下之一:
CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT
IMMUTABLE | STABLE | VOLATILE
[ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
COST execution_cost
ROWS result_rows
SET configuration_parameter { TO | = } { value | DEFAULT }
SET configuration_parameter FROM CURRENT
RESET configuration_parameter
RESET ALL
ALTER FUNCTION修改一個函數(shù)的定義。
要使用ALTER FUNCTION,你必須擁有該函數(shù)。要修改一個函數(shù)的模式, 你還必須在新模式上擁有CREATE權限。要修改所有者, 你還必須是新的所有角色的直接或間接成員,并且該成員必須在此函數(shù)的模式上有CREATE權限。 這些限制強制了修改該所有者不會做任何通過刪除和重建函數(shù)不能做的事情。不過,超級用戶可以以任何方式修改任意函數(shù)的所有權。
一個現(xiàn)有的函數(shù)名字(可以有模式修飾)
參數(shù)的模式:可以是IN,OUT, INOUT或者VARIADIC之一。 請主意ALTER FUNCTION 實際不會注意任何OUT 參數(shù), 因為判斷函數(shù)的身份只需要輸入?yún)?shù)。因此列出IN,INOUT, 和VARIADIC參數(shù)就足夠了。
參數(shù)的名字。請注意ALTER FUNCTION實際上不會注意參數(shù)的名字,因為只有參數(shù)的數(shù)據(jù)類型用于判斷函數(shù)的身份。
如果有的話,是該函數(shù)參數(shù)的數(shù)據(jù)類型(可以用模式修飾)。
函數(shù)的新名字
函數(shù)的新所有者。請注意如果函數(shù)標記為SECURITY DEFINER,那么它隨后將以新的所有者執(zhí)行。
函數(shù)的新模式
CALLED ON NULL INPUT把函數(shù)改成在所有參數(shù)都是NULL的時候也會調(diào)用它。 RETURNS NULL ON NULL INPUT或者 STRICT把函數(shù)改成如果任何一個參數(shù)是NULL就根本不執(zhí)行并且自動返回NULL 。參閱CREATE FUNCTION獲取更多信息。
把函數(shù)的易失屬性修改為指定類型。參閱CREATE FUNCTION獲取細節(jié)。
修改函數(shù)的安全性定義,標識它是否是安全定義器。出于兼容SQL標準, 關鍵字EXTERNAL將被忽略。參閱CREATE FUNCTION獲取更多有關這個功能的信息。
更改函數(shù)的估計執(zhí)行成本。 參閱CREATE FUNCTION獲取更多信息。
更改返回集函數(shù)返回的估計行數(shù)。參閱CREATE FUNCTION 獲取更多信息。
當函數(shù)被調(diào)用時,添加或者更改對配置參數(shù)值的配置。如果 value是DEFAULT,或者,等價地, RESET被使用,局部函數(shù)會被移除,這樣函數(shù)會使用當前環(huán)境中 的數(shù)值來執(zhí)行。使用RESET ALL來清理所有的局部函數(shù)設置。 SET FROM CURRENT保存會話的參數(shù)當前值為函數(shù)輸入時應用的值。
參與SET和Chapter 18 獲取更多關于允許的參數(shù)名稱和數(shù)值的信息。
因兼容SQL標準而忽略
把參數(shù)類型為integer的函數(shù)sqrt重命名為square_root:
ALTER FUNCTION sqrt(integer) RENAME TO square_root;
把參數(shù)類型為integer的函數(shù)sqrt的所有者修改為joe:
ALTER FUNCTION sqrt(integer) OWNER TO joe;
把參數(shù)類型為integer的函數(shù)sqrt的模式修改為maths:
ALTER FUNCTION sqrt(integer) SET SCHEMA maths;
調(diào)整自動為函數(shù)設定的搜索路徑:
ALTER FUNCTION check_password(text) SET search_path = admin, pg_temp;
禁用針對一個函數(shù)的search_path自動設置;
ALTER FUNCTION check_password(text) RESET search_path;
The function will now execute with whatever search path is used by its caller.
這個語句部分兼容SQL標準里面的ALTER FUNCTION語句。標準允許修改函數(shù)的更多屬性,但是沒有提供修改函數(shù)名字的功能, 也沒有提供把一個函數(shù)定義為安全定義器的功能,更沒有修改函數(shù)所有者、模式、易失性的功能。 標準還要求RESTRICT關鍵字;這在PostgreSQL里是可選的。