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:
CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT
IMMUTABLE | STABLE | VOLATILE | [ NOT ] LEAKPROOF
[ 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。 如省略的话,缺省是IN。 注意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了解更多细节。
SECURITY INVOKER表明该函数将带着调用它的用户的权限执行。 SECURITY DEFINER 声明该函数将以创建它的用户的权限执行。 关键字 EXTERNAL 不是必需的,仅是为了和 SQL 兼容。参阅 CREATE FUNCTION 了解更多细节。
更改函数的密封性。 参阅 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;
这个函数在执行时所用的搜索路径将是根据调用者所用的搜索路径。