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_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

Description

ALTER FUNCTION 更改函数定义。

您必须拥有使用 ALTER FUNCTION 的权限。要更改函数架构,您还必须在新架构上拥有 CREATE 权限。要更改所有者,您必须能向新的拥有者角色 SET ROLE ,且该角色必须对函数架构拥有 CREATE 权限。(这些限制的作用是确保更改所有者不会执行您通过删除和重新创建该函数而无法执行的操作。不过,超级用户可以随意更改任何函数的所有权。)

Parameters

  • 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

    • 设置或更改要用于此函数的规划器支持函数。请参阅 Section 38.11 以获取详细信息。您必须是超级用户才能使用此选项。

    • 此选项不能用于完全移除支持函数,因为它必须指定一个新的支持函数。如果需要这样做,请使用 CREATE OR REPLACE FUNCTION

  • configuration_parameter__value

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

    • 请参阅 SETChapter 20 以获取有关允许的参数名称和值的详细信息。

  • 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 标记为依赖于扩展 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;

此函数将使用其调用者使用的任何搜索路径执行。

Compatibility

此语句与 SQL 标准中的 ALTER FUNCTION 语句部分兼容。该标准允许修改函数的更多属性,但无法重命名函数、使函数成为安全定义,将配置参数值附加到函数,或者更改函数的所有者、模式或波动性。该标准还需要 RESTRICT 关键字,但是在 PostgreSQL 中该关键字是可选的。