选择 打开 改范围 完整检索页
受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10
当前 PostgreSQL 版本不在支持生命周期内。
您可以参阅当前版本的对应页面,或其他在上面列出的活跃大版本。

ALTER FUNCTION

ALTER FUNCTION — 更改函数的定义

Synopsis

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_USER | SESSION_USER }
ALTER FUNCTION name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
    SET SCHEMA new_schema
ALTER FUNCTION name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
    DEPENDS ON EXTENSION extension_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 }
    COST execution_cost
    ROWS result_rows
    SET configuration_parameter { TO | = } { value | DEFAULT }
    SET configuration_parameter FROM CURRENT
    RESET configuration_parameter
    RESET ALL

描述

ALTER FUNCTION更改函数的定义。

要使用ALTER FUNCTION,必须拥有该函数。要更改函数的模式,还必须在新模式上拥有CREATE权限。要更改所有者,还必须是新所有者角色的直接或间接成员,并且该角色必须在函数所在模式上拥有CREATE权限。(这些限制确保更改所有者不会执行任何无法通过删除并重新创建函数完成的操作。不过,超级用户无论如何都可以更改任何函数的所有权。)

参数

name

现有函数的名称(可以用模式限定)。如果没有指定参数列表,这个名称必须在其模式中唯一。

argmode

参数的模式:INOUTINOUTVARIADIC。如果省略, 默认为IN。注意ALTER FUNCTION 实际上并不关心任何OUT参数,因为确定函数身份只需 要输入参数。因此,只列出ININOUTVARIADIC参数就足够了。

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将该函数改为在其部分 或全部参数为 null 时仍会被调用。 RETURNS NULL ON NULL INPUTSTRICT将该函数改为只要任一参数为 null 就不调用, 而是自动假定结果为 null。详见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

添加或更改在调用该函数时要赋给某个配置参数的值。如果 valueDEFAULT,或者 等效地使用了RESET,则会移除函数局部设置,这样 该函数就会使用其环境中现有的值执行。使用RESET ALL 可以清除所有函数局部设置。SET FROM CURRENT 会把执行ALTER FUNCTION时该参数的当前值保存为 进入函数时要应用的值。

关于允许的参数名和值的更多信息,参见SETChapter 19

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, pg_temp;

要禁用自动为函数设置的search_path

ALTER FUNCTION check_password(text) RESET search_path;

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

兼容性

该语句与 SQL 标准中的ALTER FUNCTION语句部分兼 容。标准允许修改函数的更多属性,但不提供重命名函数、将函数设为安全 性定义者、为函数附加配置参数值,或者更改函数的拥有者、模式或易变性 的能力。标准还要求使用RESTRICT关键字,而它在 PostgreSQL中是可选的。