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修改一个函数的定义。
要使用ALTER FUNCTION,你必须拥有该函数。要修改一个函数的模式, 你还必须在新模式上拥有CREATE权限。要修改所有者, 你还必须是新的所有角色的直接或间接成员,并且该成员必须在此函数的模式上有CREATE权限。 这些限制强制了修改该所有者不会做任何通过删除和重建函数不能做的事情。不过,超级用户可以以任何方式修改任意函数的所有权。
一个现有的函数名字(可以有模式修饰)
参数的模式:可以是IN,OUT, INOUT或者VARIADIC之一。 请主意ALTER FUNCTION 实际不会注意任何OUT 参数, 因为判断函数的身份只需要输入参数。因此列出IN,INOUT, 和VARIADIC参数就足够了。
参数的名字。请注意ALTER FUNCTION实际上不会注意参数的名字,因为只有参数的数据类型用于判断函数的身份。
如果有的话,是该函数参数的数据类型(可以用模式修饰)。
函数的新名字
函数的新所有者。请注意如果函数标记为SECURITY DEFINER,那么它随后将以新的所有者执行。
函数的新模式
CALLED ON NULL INPUT把函数改成在所有参数都是NULL的时候也会调用它。 RETURNS NULL ON NULL INPUT或者 STRICT把函数改成如果任何一个参数是NULL就根本不执行并且自动返回NULL 。参阅CREATE FUNCTION获取更多信息。
把函数的易失属性修改为指定类型。参阅CREATE FUNCTION获取细节。
修改函数的安全性定义,标识它是否是安全定义器。出于兼容SQL标准, 关键字EXTERNAL将被忽略。参阅CREATE FUNCTION获取更多有关这个功能的信息。
更改函数的估计执行成本。 参阅CREATE FUNCTION获取更多信息。
更改返回集函数返回的估计行数。参阅CREATE FUNCTION 获取更多信息。
当函数被调用时,添加或者更改对配置参数值的配置。如果 value是DEFAULT,或者,等价地, RESET被使用,局部函数会被移除,这样函数会使用当前环境中 的数值来执行。使用RESET ALL来清理所有的局部函数设置。 SET FROM CURRENT保存会话的参数当前值为函数输入时应用的值。
参与SET和Chapter 18 获取更多关于允许的参数名称和数值的信息。
因兼容SQL标准而忽略
把参数类型为integer的函数sqrt重命名为square_root:
ALTER FUNCTION sqrt(integer) RENAME TO square_root;
把参数类型为integer的函数sqrt的所有者修改为joe:
ALTER FUNCTION sqrt(integer) OWNER TO joe;
把参数类型为integer的函数sqrt的模式修改为maths:
ALTER FUNCTION sqrt(integer) SET SCHEMA maths;
调整自动为函数设定的搜索路径:
ALTER FUNCTION check_password(text) SET search_path = admin, pg_temp;
禁用针对一个函数的search_path自动设置;
ALTER FUNCTION check_password(text) RESET search_path;
The function will now execute with whatever search path is used by its caller.