ALTER FUNCTION
ALTER FUNCTION¶
修改函数的定义。
- 语法
-
``` sql 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`部分包括: ``` sql {CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT} {IMMUTABLE | STABLE | VOLATILE | [ NOT ] LEAKPROOF} {[EXTERNAL] SECURITY INVOKER | [EXTERNAL] SECURITY DEFINER} EXECUTE ON { ANY | COORDINATOR | ALL EXECUTORS } 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
的权限。(这些限制强制执行改变所有者不会通过删除和重新创建函数做任何你不能做的事情,但是,超级用户无论如何都可以改变任何函数的所有权。) - 参数
-
该SQL命令参数说明见下
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
更改函数,以便如果其任何参数为空,则不会调用该函数;而是自动假设一个空的结果IMMUTABLE|STABLE|VOLATILE
- 将函数的波动性改为指定的设置。
[ EXTERNAL ] SECURITY INVOKER
|[ EXTERNAL ] SECURITY DEFINER
- 更改该函数是否为一个安全性定义者。 关键词
EXTERNAL
为了SQL的一致性而被忽略。 LEAKPROOF
- 更改函数是否被视为防漏的。
EXECUTE ON ANY
|EXECUTE ON COORDINATOR
|EXECUTE ON ALL EXECUTORS
-
EXECUTE ON
属性指定函数在查询执行过程中调用时执行的位置(Coordinator实例或Executor实例)。EXECUTE ON ANY
(默认值)表示该函数可以在主Coordinator实例或任何Executor实例上执行,并且无论执行 的位置如何,它都会返回相同的结果。EXECUTE ON COORDINATOR
表示该函数必须只在Coordinator实例上执行。EXECUTE ON ALL EXECUTORS
表示对于每次调用,该函数必须在所有主Executor实例上执行,而不是在 Coordinator实例上执行。 该函数的总体结果是来自所有段实例的UNION ALL
结果。 COST execution_cost
- 更改该函数的估计执行代价。参阅
CREATE FUNCTION
获取更多信息。 configuration_parameter value
- 当该函数被调用时,要对一个配置参数做出增加或者更改的赋值。如果
value
是DEFAULT
或者, 等价的RESET
被使用, 该函数本地的设置将会被 移除,这样该函数会使用其环境中存在的值执行。 使用RESET ALL
可以清除所有函数本地的设置。SET FROM URRENT
应用会话的当前值当函数被输入时。 RESTRICT
- 忽略SQL标准。
- 注意
- SeaboxMPP数据库对某些定义的函数有
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
关键字, 它在SeaboxMPP数据库中是可选的。 - 相关SQL命令
CREATE FUNCTION
,DROP FUNCTION