ALTER FUNCTION

Name

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

Synopsis

ALTER FUNCTION name ( [ [ argmode ] [ argname ] argtype [, ...] ] )
    action [, ... ] [ RESTRICT ]
ALTER FUNCTION name ( [ [ argmode ] [ argname ] argtype [, ...] ] )
    RENAME TO newname
ALTER FUNCTION name ( [ [ argmode ] [ argname ] argtype [, ...] ] )
    OWNER TO newowner

这里的 action 是下列之一:

    CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT
    IMMUTABLE | STABLE | VOLATILE
    [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER

描述

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

参数

name

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

argmode

一个参数的模式:可以是 INOUT、或者 INOUT。 如果省略,缺省是 IN。请主意 ALTER FUNCTION 实际不会注意任何 OUT 参数,因为判断函数的身份只需要输入参数。 因此列出 ININOUT 参数就足够了。

argname

参数的名字。请注意 ALTER FUNCTION 实际上不会注意参数名, 因为只有参数的数据类型需要用于判断函数的身份。

argtype

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

newname

函数的新名字。

newowner

函数的新所有者。要改变一个函数的所有者,你必须是超级用户。 请注意如果函数标记为 SECURITY DEFINER,那么它随后将以新的所有者执行。

CALLED ON NULL INPUT
RETURNS NULL ON NULL INPUT
STRICT

CALLED ON NULL INPUT 把函数改成在所有参数都是空的时候也会调用它。 RETURNS NULL ON NULL INPUT 或者 STRICT 把函数改成如果任何一个参数是空,就总是返回空。 参阅 CREATE FUNCTION 获取更多信息。

IMMUTABLE
STABLE
VOLATILE

把函数的易失属性修改为指定类型。 参阅 CREATE FUNCTION 获取有关函数易失性的更多信息。

[ EXTERNAL ] SECURITY INVOKER
[ EXTERNAL ] SECURITY DEFINER

修改函数的安全性定义,标识它是否安全定义的。 出于兼容 SQL 标准,关键字 EXTERNAL 被忽略。 参阅 CREATE FUNCTION 获取更多有关这个功能的信息。

RESTRICT

因兼容 SQL 标准而忽略。

例子

把名字为 sqrt,参数类型为 integer 的函数重命名为 square_root

ALTER FUNCTION sqrt(integer) RENAME TO square_root;

为用于类型 integer 的函数 sqrt 的所有者修改为 joe

ALTER FUNCTION sqrt(integer) OWNER TO joe;

兼容性

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

又见

CREATE FUNCTION, DROP FUNCTION