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

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
    SET configuration_parameter { TO | = } { value | DEFAULT }
    SET configuration_parameter FROM CURRENT
    RESET configuration_parameter
    RESET ALL

Description

ALTER FUNCTION更改函数的定义。

您必须拥有该函数才能使用ALTER FUNCTION。要更改函数的架构,您还必须对新架构具有CREATE特权。要更改所有者,您还必须是新拥有角色的直接或间接成员,并且该角色必须在函数的架构上具有CREATE特权。 (这些限制规定,更改所有者不会通过删除并重新创建功能来完成您无法做的任何事情.但是,超级用户仍然可以更改任何功能的所有权.)

Parameters

  • name

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

    • 参数的模式:INOUTINOUTVARIADIC。如果省略,则默认值为IN。注意ALTER FUNCTION实际上并没有注意OUT参数,因为只需要 Importing 参数即可确定函数的身份。因此,列出ININOUTVARIADIC参数就足够了。
  • argname

    • 参数的名称。注意ALTER FUNCTION实际上并没有注意参数名称,因为只需要参数数据类型即可确定函数的身份。
  • argtype

    • 函数参数的数据类型(可选,通过模式限定)(如果有)。
  • new_name

    • 函数的新名称。
  • new_owner

    • 该函数的新所有者。请注意,如果该功能标记为SECURITY DEFINER,则它将随后作为新所有者执行。
  • new_schema

    • 该函数的新架构。
  • extension_name

    • 该功能所依赖的 extensions。
  • CALLED ON NULL INPUT
    RETURNS NULL ON NULL INPUT
    STRICT

    • CALLED ON NULL INPUT更改函数,以便在其某些或所有参数为 null 时将其调用。 RETURNS NULL ON NULL INPUTSTRICT更改函数,以便在其任何参数为 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
  • configuration_parameter
    value

    • 调用函数时,添加或更改要对配置参数进行的分配。如果* value *为DEFAULT或等效地使用RESET,则将删除函数本地设置,以便函数以其环境中存在的值执行。使用RESET ALL清除所有本地功能设置。 SET FROM CURRENT将执行ALTER FUNCTION时的当前参数值保存为 Importing 该功能时要应用的值。

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

  • RESTRICT

    • 忽略与 SQL 标准的一致性。

Examples

要将类型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标记为依赖于 extensionsmathlib

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;

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

Compatibility

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

See Also

CREATE FUNCTION, DROP FUNCTION