ALTER FUNCTION — 更改一个函数的定义
ALTER FUNCTIONname
[ ( [ [argmode
] [argname
]argtype
[, ...] ] ) ]action
[ ... ] [ RESTRICT ] ALTER FUNCTIONname
[ ( [ [argmode
] [argname
]argtype
[, ...] ] ) ] RENAME TOnew_name
ALTER FUNCTIONname
[ ( [ [argmode
] [argname
]argtype
[, ...] ] ) ] OWNER TO {new_owner
| CURRENT_USER | SESSION_USER } ALTER FUNCTIONname
[ ( [ [argmode
] [argname
]argtype
[, ...] ] ) ] SET SCHEMAnew_schema
ALTER FUNCTIONname
[ ( [ [argmode
] [argname
]argtype
[, ...] ] ) ] DEPENDS ON EXTENSIONextension_name
其中action
是以下之一: CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT IMMUTABLE | STABLE | VOLATILE | [ NOT ] LEAKPROOF [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER PARALLEL { UNSAFE | RESTRICTED | SAFE } COSTexecution_cost
ROWSresult_rows
SETconfiguration_parameter
{ TO | = } {value
| DEFAULT } SETconfiguration_parameter
FROM CURRENT RESETconfiguration_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
该函数的新模式。
extension_name
该函数所以来的扩展名。
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。
PARALLEL
决定该函数对于并行是否安全。详见 CREATE FUNCTION。
LEAKPROOF
更改该函数是否被认为是防泄漏的。关于这项能力的详情请见 CREATE FUNCTION。
COST
execution_cost
更改该函数的估计执行代价。详见CREATE FUNCTION。
ROWS
result_rows
更改一个集合返回函数的估计行数。详见 CREATE FUNCTION。
configuration_parameter
value
当该函数被调用时,要对一个配置参数做出增加或者更改的赋值。如果
value
是DEFAULT
或者使用等价的RESET
,该函数本地的设置将会被
移除,这样该函数会使用其环境中存在的值执行。使用RESET
ALL
可以清除所有函数本地的设置。
SET FROM CURRENT
把ALTER FUNCTION
执行时该参数的当前值保存为进入
该函数时要应用的值。
有关允许的参数名称和值可详见SET。
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;
要把类型integer
的函数sqrt
标记为依赖于扩展mathlib
:
ALTER FUNCTION sqrt(integer) DEPENDS ON EXTENSION mathlib;
要调整一个函数的自动搜索路径:
ALTER FUNCTION check_password(text) SET search_path = admin, ux_temp;
要禁止一个函数的search_path
的自动设置:
ALTER FUNCTION check_password(text) RESET search_path;
这个函数将用其调用者使用的搜索路径来执行。
这个语句部分兼容 SQL 标准中的ALTER
FUNCTION
语句。该标准允许修改一个函数的更多属性,但是不提供
重命名一个函数、标记一个函数为安全性定义者、为一个函数附加配置参
数值或者更改一个函数的拥有者、模式或者稳定性等功能。该标准还要求
RESTRICT
关键字,它在UXDB
中是可选的。