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_
参数的模式:IN
、OUT
、INOUT
或是VARIADIC
。 如省略的话,缺省是IN
。 注意ALTER FUNCTION
实际不会关注任何OUT
参数, 因为确认函数的逻辑只需要知道输入参数。 因此列出IN
、INOUT
和VARIADIC
参数就足够了。
_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 INPUT
或STRICT
把函数改成如果任何一个参数是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_
当函数被调用时,添加或者更改对配置参数值的配置。如果 _value_
是DEFAULT
, 或者相应地RESET
选项被使用,函数的局部设置参数会被清除,这样函数会使用当前环境中的参数值来执行。 使用RESET ALL
来清理所有的函数局部设置参数。 SET FROM CURRENT
保存会话的参数当前值为函数调用时会应用的参数值。
参阅SET和Chapter 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里是可选的。