PostgreSQL 9.4.4 中文手册
上一页 | 上一级 |  | 下一页

# 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
    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
    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`

  参数的模式：`IN`、`OUT`、`INOUT`或是`VARIADIC`。 如省略的话，缺省是`IN`。 注意`ALTER FUNCTION` 实际不会关注任何`OUT` 参数， 因为判断函数的身份只需要输入参数。 因此列出`IN`、`INOUT`和`VARIADIC`参数就足够了。

`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 INPUT`或`STRICT` 把函数改成如果任何一个参数是 NULL 就根本不执行并且自动返回 NULL。 参阅CREATE FUNCTION获取更多信息。

`IMMUTABLE`
`STABLE`
`VOLATILE`

  把函数的易失属性修改为指定类型。参阅CREATE FUNCTION了解更多细节。

`[ EXTERNAL ] SECURITY INVOKER`
`[ EXTERNAL ] SECURITY DEFINER`

  修改函数的安全性定义，标识它是否是安全定义器。出于兼容 SQL 标准， 关键字`EXTERNAL`将被忽略。参阅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`保存会话的参数当前值为函数调用时会应用的参数值。

  参阅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里是可选的。

## 又见

CREATE FUNCTION, DROP FUNCTION

上一页 | 起始页 | 下一页
ALTER FOREIGN TABLE | 上一级 | ALTER GROUP