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

其中action是:

{CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT}
{IMMUTABLE | STABLE | VOLATILE | [ NOT ] LEAKPROOF}
{[EXTERNAL] SECURITY INVOKER | [EXTERNAL] SECURITY DEFINER}
EXECUTE ON { ANY | MASTER | ALL SEGMENTS | INITPLAN }
COST execution_cost
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将该函数改为在某些 或者全部参数为空值时可以被调用。 RETURNS NULL ON NULL INPUT 或者STRICT 更改函数,以便如果其任何参数为空,则不会调用该函数; 而是自动假设一个空的结果。参阅CREATE FUNCTION 获取更多信息。

IMMUTABLE

STABLE

VOLATILE

  • 将函数的波动性改为指定的设置。参阅CREATE FUNCTION 获取更多信息。

[ EXTERNAL ] SECURITY INVOKER

[ EXTERNAL ] SECURITY DEFINER

  • 更改该函数是否为一个安全性定义者。 关键词 EXTERNAL为了SQL的一致性而被忽略。参阅CREATE FUNCTION获取更多有关此功能的信息。

LEAKPROOF

  • 更改函数是否被视为防漏的。参阅 CREATE FUNCTION 关于此功能的更多信息。

EXECUTE ON ANY

EXECUTE ON MASTER

EXECUTE ON ALL SEGMENTS

EXECUTE ON INITPLAN

  • EXECUTE ON属性指定函数在查询执行过程中调用时执行的位置(主实例或段实例)。
    EXECUTE ON ANY (默认值)表示该函数可以在主服务器或任何段实例上执行,并且无论执行 的位置如何,它都会返回相同的结果。 MatrixDB数据库确定函数执行的位置。
    EXECUTE ON MASTER表示该函数必须只在主实例上执行。
    EXECUTE ON ALL SEGMENTS表示对于每次调用,该函数必须在所有主段实例上执行,而不是在 主节点上执行。 该函数的总体结果是来自所有段实例的 UNION ALL结果。
    EXECUTE ON属性的更多信息,请参阅CREATE FUNCTION。
    EXECUTE ON INITPLAN表示函数中包含需要将查询分发到segment节点执行的SQL语句并且可能的话需要master特殊处理。

COST execution_cost

  • 更改该函数的估计执行代价。参阅CREATE FUNCTION 获取更多信息。

configuration_parameter

value

  • 当该函数被调用时,要对一个配置参数做出增加或者更改的赋值。如果 value 是 DEFAULT 或者, 等价的 RESET 被使用, 该函数本地的设置将会被 移除,这样该函数会使用其环境中存在的值执行。 使用RESET ALL可以清除所有函数本地的设置。 SET FROM CURRENT应用会话的当前值当函数被输入时。

RESTRICT

  • 忽略SQL标准。

注意

MatrixDB数据库对某些定义的函数有 STABLE 或者 VOLATILE 这样的限制。 参阅CREATE FUNCTION来获取更多信息。

示例

将integer类型的函数sqrt重命名为square_root:

ALTER FUNCTION sqrt(integer) RENAME TO square_root;

更改integer 类型的 sqrt 函数的所有者为 joe

ALTER FUNCTION sqrt(integer) OWNER TO joe;

更改integer 类型的函数 sqrt 的 模式 为math:

ALTER FUNCTION sqrt(integer) SET SCHEMA math;

要调整一个函数的自动搜索路径:

ALTER FUNCTION check_password(text) RESET search_path;

兼容性

这个语句部分兼容 SQL 标准中的 ALTER FUNCTION 语句。该标准允许修改一个函数的更多属性,但是不提供重命名一个函数、标记一个函数为安全性定义者、为一个函数附加配置参数值或者更改一个函数的拥有者、模式或者稳定性等功能。 该标准还需要 RESTRICT 关键字, 它在MatrixDB数据库中是可选的。

另见

CREATE FUNCTION , DROP FUNCTION