ALTER FUNCTION
ALTER FUNCTION — 更改函数的定义
大纲
ALTER FUNCTIONname( [ [argmode] [argname]argtype[, ...] ] )action[, ... ] [ RESTRICT ] ALTER FUNCTIONname( [ [argmode] [argname]argtype[, ...] ] ) RENAME TOnew_nameALTER FUNCTIONname( [ [argmode] [argname]argtype[, ...] ] ) OWNER TOnew_ownerALTER FUNCTIONname( [ [argmode] [argname]argtype[, ...] ] ) SET SCHEMAnew_schemawhereactionis one of: CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT IMMUTABLE | STABLE | VOLATILE [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
描述
ALTER FUNCTION更改函数的定义。
要使用ALTER FUNCTION,必须拥有该函数。要更改函数的模式,还必须在新模式上拥有CREATE权限。要更改所有者,还必须是新所有者角色的直接或间接成员,并且该角色必须在函数所在模式上拥有CREATE权限。(这些限制确保更改所有者不会执行任何无法通过删除并重新创建函数完成的操作。不过,超级用户无论如何都可以更改任何函数的所有权。)
参数
name现有函数的名称(可以用模式限定)。
argmode参数的模式:
IN、OUT或INOUT。如果省略,默认为IN。注意ALTER FUNCTION实际上并不关心任何OUT参数,因为确定函数身份只需要输入参数。因此,只列出IN和INOUT参数就足够了。argname参数的名称。注意
ALTER FUNCTION实际上并不关心参数名,因为确定函数身份只需要参数数据类型。argtype函数参数的数据类型(如果有,可以用模式限定)。
new_name该函数的新名称。
new_owner该函数的新拥有者。注意,如果该函数被标记为
SECURITY DEFINER,随后它将以新拥有者的身份执行。new_schema该函数的新模式。
CALLED ON NULL INPUTRETURNS NULL ON NULL INPUTSTRICTCALLED ON NULL INPUT将该函数改为在其部分或全部参数为 null 时仍会被调用。RETURNS NULL ON NULL INPUT或STRICT将该函数改为只要任一参数为 null 就不调用,而是自动假定结果为 null。详见CREATE FUNCTION。IMMUTABLESTABLEVOLATILE将该函数的易变性更改为指定的设置。详见CREATE FUNCTION。
[ EXTERNAL ] SECURITY INVOKER[ EXTERNAL ] SECURITY DEFINER更改该函数是否为安全性定义者。关键字
EXTERNAL为了符合 SQL 标准而被忽略。关于这一能力的更多信息,参见CREATE FUNCTION。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;
兼容性
该语句与 SQL 标准中的ALTER FUNCTION语句部分兼容。标准允许修改函数的更多属性,但不提供重命名函数、将函数设为安全性定义者,或者更改函数的拥有者、模式或易变性的能力。标准还要求使用RESTRICT关键字,而它在
PostgreSQL中是可选的。