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
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}
EXECUTE ON { ANY | MASTER | ALL SEGMENTS }
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](CREATE_FUNCTION.html#topic1)
获取更多信息。
IMMUTABLE
STABLE
VOLATILE
将函数的波动性改为指定的设置。参阅[CREATE FUNCTION](CREATE_FUNCTION.html#topic1)
获取更多信息
[ 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
属性指定函数在查询执行过程中调用时执行的位置(主实例或段实例)。
EXECUTE ON ANY
(默认值)表示该函数可以在主服务器或任何段实例上执行,并且无论执行
的位置如何,它都会返回相同的结果。 Greenplum数据库确定函数执行的位置。
EXECUTE ON MASTER
表示该函数必须只在主实例上执行。
EXECUTE ON ALL SEGMENTS
表示对于每次调用,该函数必须在所有主段实例上执行,而不是在
主节点上执行。 该函数的总体结果是来自所有段实例的 UNION ALL
结果。
EXECUTE ON
属性的更多信息,请参阅[CREATE
FUNCTION](CREATE_FUNCTION.html#topic1)
.
COST execution_cost
更改该函数的估计执行代价。参阅[CREATE FUNCTION](CREATE_FUNCTION.html#topic1)
获取更多信息。
configuration_parameter
value
当该函数被调用时,要对一个配置参数做出增加或者更改的赋值。如果 value 是 DEFAULT
或者, 等价的 RESET
被使用, 该函数本地的设置将会被 移除,这样该函数会使用其环境中存在的值执行。 使用RESET ALL
可以清除所有函数本地的设置。 SET FROM CURRENT
应用会话的当前值当函数被输入时。
RESTRICT
忽略SQL标准。
注意
Greenplum数据库对某些定义的函数有 STABLE
或者 VOLATILE
这样的限制。
参阅[CREATE FUNCTION](CREATE_FUNCTION.html#topic1)
来获取更多信息。
示例
将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
关键字, 它在Greenplum数据库中是可选的。
另见
[CREATE FUNCTION](CREATE_FUNCTION.html#topic1)
, [DROP FUNCTION](DROP_FUNCTION.html#topic1)
Parent topic: SQL Command Reference