## 改变功能 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 | CURRENT_ROLE | CURRENT_USER | SESSION_USER } ALTER FUNCTION name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] SET SCHEMA new_schema ALTER FUNCTION name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] [ NO ] DEPENDS ON EXTENSION extension_name 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 PARALLEL { UNSAFE | RESTRICTED | SAFE } COST execution_cost ROWS result_rows SUPPORT support_function SET configuration_parameter { TO | = } { value | DEFAULT } SET configuration_parameter FROM CURRENT RESET configuration_parameter RESET ALL ``` ## 描述 `改变功能`改变函数的定义。 您必须拥有要使用的功能`改变功能`.要更改函数的架构,您还必须具有`创造`新架构的特权。要更改所有者,您还必须是新所有者角色的直接或间接成员,并且该角色必须具有`创造`对函数架构的特权。(这些限制强制改变所有者不会做任何你不能通过删除和重新创建函数来做的事情。但是,超级用户无论如何都可以改变任何函数的所有权。)参数 ## 姓名 *`现有函数的名称(可选模式限定)。`* 如果未指定参数列表,则名称在其模式中必须是唯一的。参数模式 *`参数的模式:`* 在`,`出去`,`进出`, 或者`杂音`.`如果省略,则默认为`在`.注意`改变功能`实际上并没有注意`出去`参数,因为只需要输入参数来确定函数的身份。所以列出来就足够了`在`,`进出`, 和`杂音`论据。 *`参数名称`* 参数的名称。注意`改变功能`实际上并不关注参数名称,因为只需要参数数据类型来确定函数的身份。 *`参数类型`* 函数参数的数据类型(可选模式限定),如果有的话。 *`新名字`* 函数的新名称。 *`新主人`* 函数的新所有者。请注意,如果功能被标记`安全定义器`,它将随后作为新所有者执行。 *`新模式`* 函数的新架构。 `取决于扩展 *`扩展名`*`\ `不依赖于扩展 *`扩展名`*` 这种形式将函数标记为依赖于扩展,或者不再依赖于该扩展,如果`不`被指定。删除扩展时会自动删除标记为依赖于扩展的函数。 `空输入时调用`\ `NULL 输入返回 NULL`\ `严格的` `空输入时调用`更改函数,以便在其部分或全部参数为空时调用它。`NULL 输入返回 NULL`或者`严格的`更改函数,使其在任何参数为空时都不会被调用;相反,会自动假定为空结果。看[创建函数](sql-createfunction.html)了解更多信息。 `不可变的`\ `稳定的`\ `易挥发的` 将函数的波动性更改为指定的设置。看[创建函数](sql-createfunction.html)详情。 `[外部]安全调用者`\ `[外部]安全定义器` 更改函数是否为安全定义器。关键词`外部的`SQL 一致性被忽略。看[创建函数](sql-createfunction.html)有关此功能的更多信息。 `平行线` 更改函数是否被认为对并行性安全。看[创建函数](sql-createfunction.html)详情。 `防漏` 更改该功能是否被认为是防漏的。看[创建函数](sql-createfunction.html)有关此功能的更多信息。 `成本` *`执行成本`* 更改函数的估计执行成本。看[创建函数](sql-createfunction.html)了解更多信息。 `行` *`结果行`* 更改集合返回函数返回的估计行数。看[创建函数](sql-createfunction.html)了解更多信息。 `支持` *`支持功能`* 设置或更改计划器支持功能以用于此功能。看[第 38.11 节](xfunc-optimization.html)详情。您必须是超级用户才能使用此选项。 此选项不能用于完全删除支持功能,因为它必须命名一个新的支持功能。采用`创建或替换函数`如果你需要这样做。 *`配置参数`*\ *`价值`* 在调用函数时添加或更改要对配置参数进行的分配。如果*`价值`*是`默认`或者,等效地,`重置`使用时,函数本地设置被删除,以便函数以其环境中存在的值执行。采用`重置全部`清除所有功能本地设置。`从当前设置`保存当前参数的值`改变功能`作为输入函数时应用的值执行。 看[放](sql-set.html)和[第 20 章](runtime-config.html)有关允许的参数名称和值的更多信息。 `严格` 忽略以符合 SQL 标准。 ## 例子 重命名函数`平方`对于类型`整数`到`平方根`: ``` ALTER FUNCTION sqrt(integer) RENAME TO square_root; ``` 更改函数的所有者`平方`对于类型`整数`到`乔`: ``` ALTER FUNCTION sqrt(integer) OWNER TO joe; ``` 更改函数的架构`平方`对于类型`整数`到`数学`: ``` ALTER FUNCTION sqrt(integer) SET SCHEMA maths; ``` 标记功能`sqrt`for type`integer`as being dependent on the extension`mathlib`: ``` ALTER FUNCTION sqrt(integer) DEPENDS ON EXTENSION mathlib; ``` To adjust the search path that is automatically set for a function: ``` ALTER FUNCTION check_password(text) SET search_path = admin, pg_temp; ``` To disable automatic setting of`search_path`for a function: ``` ALTER FUNCTION check_password(text) RESET search_path; ``` The function will now execute with whatever search path is used by its caller. ## Compatibility This statement is partially compatible with the`ALTER FUNCTION`statement in the SQL standard. The standard allows more properties of a function to be modified, but does not provide the ability to rename a function, make a function a security definer, attach configuration parameter values to a function, or change the owner, schema, or volatility of a function. The standard also requires the`RESTRICT`key word, which is optional in PostgreSQL. ## See Also [CREATE FUNCTION](sql-createfunction.html),[DROP FUNCTION](sql-dropfunction.html),[ALTER PROCEDURE](sql-alterprocedure.html),[ALTER ROUTINE](sql-alterroutine.html)