文档

ALTER FUNCTION

更新时间:

ALTER FUNCTION更改一个函数的定义。

简介

你必须拥有该函数以使用ALTER FUNCTION。要更改一个函数的模式,你还必须具有新模式上的CREATE特权。要更改拥有者,你还必须是新拥有角色的一个直接或者间接成员,并且该角色必须具有在该函数的模式上的CREATE特权(这些限制强制修改拥有者不能做一些通过删除和重建该函数做不到的事情。不过,一个超级用户怎么都能更改任何函数的所有权)。

语法

    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 [, ...] ] ) ]
        [ NO ] 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
        SUPPORT support_function
        SET configuration_parameter { TO | = } { value | DEFAULT }
        SET configuration_parameter FROM CURRENT
        RESET configuration_parameter
        RESET ALL

参数

name一个现有函数的名称(可以被模式限定)。如果没有指定参数列表, 则该名称必须在它的模式中唯一。

argmode一个参数的模式:INOUTINOUT或者VARIADIC。如果被忽略,默认为 IN。注意ALTER FUNCTION 并不真正关心OUT参数,因为在决定函数的身份时只需要输入参数。因此列出ININOUT以及 VARIADIC参数即可。

argname一个参数的名称。注意ALTER FUNCTION 并不真正参数名称,因为在确定函数的身份时只需要参数的数据类型即可。

argtype该函数的参数(如果有)的数据类型(可以被模式限定)。

new_name该函数的新名称。

new_owner该函数的新拥有者。注意如果该函数被标记为 SECURITY DEFINER,它的后续执行将会使用新拥有者。

new_schema该函数的新模式。

DEPENDS ON EXTENSIONextension_nameNO DEPENDS ON EXTENSIONextension_name此格式将功能标记为依赖于扩展名,或者如果指定了NO ,则不再依赖于该扩展名。 删除扩展名后,会自动删除标记为依赖于扩展名的功能。

CALLED ON NULL INPUTRETURNS NULL ON NULL INPUTSTRICTCALLED ON NULL INPUT将该函数改为在某些或者全部参数为空值时可以被调用。 RETURNS NULL ON NULL INPUT或者 STRICT将该函数改为只要任一参数为空值就不被调用而是自动假定一个空值结果。

IMMUTABLESTABLEVOLATILE把该函数的稳定性更改为指定的设置。

[EXTERNAL] SECURITY INVOKER[EXTERNAL] SECURITY DEFINER更改该函数是否为一个安全性定义者。关键词EXTERNAL 是为了符合 SQL,它会被忽略。

PARALLEL决定该函数对于并行是否安全。

LEAKPROOF更改该函数是否被认为是防泄漏的。

COST execution_cost更改该函数的估计执行代价。

ROWS result_rows更改一个集合返回函数的估计行数。

SUPPORT support_function设置或更改计划器支持函数以使用这个函数。

此选项不能用于完全删除支持功能,因为它必须命名新的支持函数。 如果需要这样做,可以使用CREATE OR REPLACE FUNCTION

configuration_parametervalue当该函数被调用时,要对一个配置参数做出增加或者更改的赋值。如果 valueDEFAULT 或者使用等价的RESET,该函数本地的设置将会被移除,这样该函数会使用其环境中存在的值执行。使用RESET ALL可以清除所有函数本地的设置。 SET FROM CURRENTALTER FUNCTION 执行时该参数的当前值保存为进入该函数时要应用的值。

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;

这个函数将用其调用者使用的搜索路径来执行。

  • 本页导读 (0)