Redrock Postgres 搜索 英文
版本: 9.3 / 9.4 / 9.5 / 9.6 / 10 / 11 / 12 / 13 / 14 / 15 / 16 / 17

ALTER FUNCTION

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

说明

ALTER FUNCTION 更改函数的定义。

必须拥有该函数才能使用 ALTER FUNCTION。若要更改函数架构,必须在新架构上拥有 CREATE 权限。若要更改所有者,必须能够对新所有者角色 SET ROLE,此角色必须对函数的架构拥有 CREATE 权限。(这些限制确保更改所有者不会做任何通过删除并重新创建函数而无法做的事。然而,超级用户无论如何都可以更改任何函数的所有权。)

参数

name

现有函数的名称(可选择架构限定)。如果未指定参数列表,名称在架构中必须唯一。

argmode

参数的模式:INOUTINOUTVARIADIC。如果省略,则默认为 IN。请注意,ALTER FUNCTION 实际上不会在意 OUT 参数,因为仅需输入参数确定函数的身份。因此,仅列出 ININOUTVARIADIC 参数即可。

argname

参数的名称。请注意,ALTER FUNCTION 实际上不会在意参数名称,因为仅需参数数据类型确定函数的身份。

argtype

函数参数的数据类型(可选择架构限定),如果有的话。

new_name

新名称。

new_owner

新所有者。请注意,如果函数标记为 SECURITY DEFINER,它会随后的作为新所有者执行。

new_schema

新架构。

DEPENDS ON EXTENSION extension_name
NO DEPENDS ON EXTENSION extension_name

此表单将此函数标记为依赖扩展,如果指定 NO 则不再依赖于此扩展。标记为依赖扩展的函数在扩展被删除时删除,即使未指定 CASCADE。函数可依赖于多个扩展,并且在任何一个扩展被删除时会删除函数。

CALLED ON NULL INPUT
RETURNS NULL ON NULL INPUT
STRICT

CALLED ON NULL INPUT 改变函数,使其在某些或所有参数为 null 时将被调用。 RETURNS NULL ON NULL INPUTSTRICT 改变函数,使其在任何参数为 null 时不予调用;相反,自动地假定为 null 结果。请参阅 CREATE FUNCTION 了解更多信息。

IMMUTABLE
STABLE
VOLATILE

将函数的易失性更改为指定设置。有关详细信息,请参阅 CREATE FUNCTION

[ EXTERNAL ] SECURITY INVOKER
[ EXTERNAL ] SECURITY DEFINER

更改函数是否为安全定义者。出于 SQL 合规性目的而忽略关键词 EXTERNAL。有关此功能的更多信息,请参阅 CREATE FUNCTION

PARALLEL

更改函数是否被视为可用于并行处理。有关详细信息,请参阅 CREATE FUNCTION

LEAKPROOF

更改函数是否被视为防泄漏。有关此功能的更多信息,请参阅 CREATE FUNCTION

COST execution_cost

更改函数的估计执行开销。有关更多信息,请参阅 CREATE FUNCTION

ROWS result_rows

更改由集合返回函数返回的估计行数。有关更多信息,请参阅 CREATE FUNCTION

SUPPORT support_function

设置或更改用于此函数的规划器支持函数。有关详细信息,请参阅 第 36.11 节。您必须为超级用户才能使用此选项。

此选项无法用来完全删除支持函数,因为它必须为一个新的支持函数命名。在需要这样做的情况下,请使用 CREATE OR REPLACE FUNCTION

配置参数

为函数调用分配配置参数时,添加或更改分配。如果 DEFAULT,或者等效地使用了 RESET,则函数本地设置将被移除,以便使用环境中存在的值执行函数。使用 RESET ALL 清除所有函数本地设置。 SET FROM CURRENT 将在执行 ALTER FUNCTION 时当前的参数值保存为在进入函数时应用的值。

请参阅 SET第 19 章,以了解有关允许的参数名称和值的更多信息。

RESTRICT

为符合 SQL 标准而忽略。

示例

将类型为 整数 的函数 sqrt 重命名为 square_root

ALTER FUNCTION sqrt(integer) RENAME TO square_root;

将类型为 整数 的函数 sqrt 的所有者更改为 joe

ALTER FUNCTION sqrt(integer) OWNER TO joe;

将类型为 整数 的函数 sqrt 的架构更改为 maths

ALTER FUNCTION sqrt(integer) SET SCHEMA maths;

将类型为 整数 的函数 sqrt 标记为依赖于扩展 mathlib

ALTER FUNCTION sqrt(integer) DEPENDS ON EXTENSION mathlib;

调整为函数自动设置的搜索路径

ALTER FUNCTION check_password(text) SET search_path = admin, pg_temp;

禁用为函数自动设置 search_path

ALTER FUNCTION check_password(text) RESET search_path;

该函数现在将使用由其调用者使用的任何搜索路径执行。

兼容性

此语句与 SQL 标准中的 ALTER FUNCTION 语句部分兼容。该标准允许修改更多函数属性,但不提供重命名函数、使函数成为安全定义者、将配置参数值附加到函数或更改函数的所有者、架构或不稳定性的功能。<该标准还要求使用 RESTRICT 关键字,该关键字在 PostgreSQL 中为可选的。

另请参阅

CREATE FUNCTIONDROP FUNCTIONALTER PROCEDUREALTER ROUTINE