问题报告 纠错本页面

ALTER FUNCTION

Name

ALTER FUNCTION -- 修改一个函数的定义

Synopsis

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 权限。 (这些限制保证了修改所有者和删除、重建函数的动作没啥区别。 不过,超级用户可以用任何方法修改函数的所有关系。)

参数

name

一个现有的函数名字(可以有模式修饰) 。

argmode

参数的模式:INOUTINOUT或是VARIADIC。 如省略的话,缺省是IN。 注意ALTER FUNCTION 实际不会关注任何OUT 参数, 因为确认函数的逻辑只需要知道输入参数。 因此列出ININOUTVARIADIC参数就足够了。

argname

参数的名字。 请注意ALTER FUNCTION实际上不会关注参数的名字,因为只有参数的数据类型用于确认函数的逻辑。

argtype

如果有的话,是该函数参数的数据类型(可以用模式修饰)。

new_name

函数的新名字。

new_owner

函数的新所有者。请注意如果函数标记为SECURITY DEFINER,那么它随后将以新的所有者执行。

new_schema

函数的新模式名称。

CALLED ON NULL INPUT
RETURNS NULL ON NULL INPUT
STRICT

CALLED ON NULL INPUT 选项会在函数的部分或是全部的参数是NULL的时候会调用它。 RETURNS NULL ON NULL INPUTSTRICT 把函数改成如果任何一个参数是NULL就根本不执行并且自动返回NULL 。 参阅CREATE FUNCTION获取更多信息。

IMMUTABLE
STABLE
VOLATILE

把函数的易失属性修改为指定类型。参阅CREATE FUNCTION了解更多细节。

[ EXTERNAL ] SECURITY INVOKER
[ EXTERNAL ] SECURITY DEFINER

SECURITY INVOKER表明该函数将带着调用它的用户的权限执行。 SECURITY DEFINER 声明该函数将以创建它的用户的权限执行。 关键字 EXTERNAL 不是必需的,仅是为了和 SQL 兼容。参阅 CREATE FUNCTION 了解更多细节。

LEAKPROOF

更改函数的密封性。 参阅 CREATE FUNCTION 了解更多细节。

COST execution_cost

更改函数的估计执行成本。 参阅CREATE FUNCTION了解更多细节。

ROWS result_rows

更改返回数据集类型函数的返回估计行数。参阅CREATE FUNCTION了解更多细节。

configuration_parameter
value

当函数被调用时,添加或者更改对配置参数值的配置。如果 valueDEFAULT, 或者相应地RESET选项被使用,函数的局部设置参数会被清除,这样函数会使用当前环境中的参数值来执行。 使用RESET ALL来清理所有的函数局部设置参数。 SET FROM CURRENT保存会话的参数当前值为函数调用时会应用的参数值。

参阅SETChapter 18 了解更多关于允许的参数名称和数值的信息。

RESTRICT

可忽略的选项,仅为了符合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;

这个函数在执行时所用的搜索路径将是根据调用者所用的搜索路径。

兼容性

这个语句部分兼容SQL标准里面的ALTER FUNCTION语句。 标准允许修改函数的更多属性,但是没有提供修改函数名字的功能, 也没有提供把一个函数定义为安全定义器的功能, 更没有修改函数所有者、模式、易失性的功能。 标准还要求RESTRICT关键字,这在PostgreSQL里是可选的。

参见

CREATE FUNCTION, DROP FUNCTION