选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0
历史版本PostgreSQL 9.2 已于 2017 年 11 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本

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
ALTER FUNCTION name ( [ [ argmode ] [ argname ] argtype [, ...] ] )
    SET SCHEMA new_schema

其中action为以下之一:

    CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT
    IMMUTABLE | STABLE | VOLATILE | [ NOT ] LEAKPROOF
    [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
    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

该函数的新模式。

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

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时该参数的当前值保存为 进入函数时要应用的值。

关于允许的参数名和值的更多信息,参见SET第 18 章

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;

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

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中是可选的。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。