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:这里的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权限。 这些限制强制了修改该所有者不会做任何通过删除和重建函数不能做的事情。不过,超级用户可以以任何方式修改任意函数的所有权。

参数

name

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

argmode

参数的模式:可以是INOUTINOUT或者VARIADIC之一。 请主意ALTER FUNCTION 实际不会注意任何OUT 参数, 因为判断函数的身份只需要输入参数。因此列出ININOUT, 和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

修改函数的安全性定义,标识它是否是安全定义器。出于兼容SQL标准, 关键字EXTERNAL将被忽略。参阅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;

The function will now execute with whatever search path is used by its caller.

兼容性

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

又见

CREATE FUNCTION, DROP FUNCTION