问题报告 纠错本页面

ALTER FUNCTION

名称

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

大纲

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

修改函数的安全性定义,标识它是否是安全定义器。出于兼容 SQL 标准, 关键字EXTERNAL将被忽略。参阅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保存会话的参数当前值为函数调用时会应用的参数值。

参阅SET第 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