# 改变功能

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 一致性被忽略。看创建函数有关此功能的更多信息。

平行线

更改函数是否被认为对并行性安全。看创建函数详情。

防漏

更改该功能是否被认为是防漏的。看创建函数有关此功能的更多信息。

成本 执行成本

更改函数的估计执行成本。看创建函数了解更多信息。

结果行

更改集合返回函数返回的估计行数。看创建函数了解更多信息。

支持 支持功能

设置或更改计划器支持功能以用于此功能。看第 38.11 节详情。您必须是超级用户才能使用此选项。

此选项不能用于完全删除支持功能,因为它必须命名一个新的支持功能。采用创建或替换函数如果你需要这样做。

配置参数
价值

在调用函数时添加或更改要对配置参数进行的分配。如果*价值*是默认或者,等效地,重置使用时,函数本地设置被删除,以便函数以其环境中存在的值执行。采用重置全部清除所有功能本地设置。从当前设置保存当前参数的值改变功能作为输入函数时应用的值执行。

第 20 章有关允许的参数名称和值的更多信息。

严格

忽略以符合 SQL 标准。

# 例子

重命名函数平方对于类型整数平方根

ALTER FUNCTION sqrt(integer) RENAME TO square_root;

更改函数的所有者平方对于类型整数

ALTER FUNCTION sqrt(integer) OWNER TO joe;

更改函数的架构平方对于类型整数数学

ALTER FUNCTION sqrt(integer) SET SCHEMA maths;

标记功能sqrtfor typeintegeras being dependent on the extensionmathlib:

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 ofsearch_pathfor 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 theALTER FUNCTIONstatement 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 theRESTRICTkey word, which is optional in PostgreSQL.

# See Also

CREATE FUNCTION,DROP FUNCTION,ALTER PROCEDURE,ALTER ROUTINE