Postgresql 中文操作指南

ALTER PROCEDURE

ALTER PROCEDURE — 更改过程的定义

Synopsis

ALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
    action [ ... ] [ RESTRICT ]
ALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
    RENAME TO new_name
ALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
    OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
ALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
    SET SCHEMA new_schema
ALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
    [ NO ] DEPENDS ON EXTENSION extension_name

where action is one of:

    [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
    SET configuration_parameter { TO | = } { value | DEFAULT }
    SET configuration_parameter FROM CURRENT
    RESET configuration_parameter
    RESET ALL

Description

ALTER PROCEDURE 更改过程的定义。

您必须拥有该过程才能使用 ALTER PROCEDURE 。要更改过程架构,您还必须对新架构拥有 CREATE 特权。要更改所有者,您必须能够将 SET ROLE 所有权转让给新的所有者角色,并且该角色必须对该过程的架构拥有 CREATE 特权。(这些限制强制执行所有者更改操作不得执行通过删除和重新创建过程无法执行的操作。但是,超级用户无论如何都可以更改任何过程的所有权。)

Parameters

  • name

    • 现有过程的名称(可选择使用架构限定)。如果未指定参数列表,则该名称在其架构中必须唯一。

  • argmode

    • 参数的模式: INOUTINOUTVARIADIC 。如果省略,则默认值为 IN

  • argname

    • 参数的名称。请注意, ALTER PROCEDURE 实际上不关注参数名称,因为仅使用参数数据类型就能确定过程标识。

  • argtype

    • 该过程的参数的(可选择使用架构限定)数据类型(如果存在)。有关使用参数数据类型查找过程的详细信息,请参阅 DROP PROCEDURE

  • new_name

    • 该过程的新名称。

  • new_owner

    • 该过程的新所有者。请注意,如果已标记该过程 SECURITY DEFINER ,则随后将以新所有者身份执行该过程。

  • new_schema

    • 该过程的新架构。

  • extension_name

    • 此形式将该过程标记为依赖于扩展或不再依赖于扩展(如果已指定 NO )。已标记为依赖于扩展的过程在删除扩展后会被删除,即使未指定级联。该过程可依赖多个扩展,并且在删除任何一个扩展后都会被删除。

  • [ EXTERNAL ] SECURITY INVOKER_ [ EXTERNAL ] SECURITY DEFINER_

    • 更改该过程是否为安全定义者。出于 SQL 符合性,将忽略关键字 EXTERNAL 。有关此功能的更多信息,请参阅 CREATE PROCEDURE

  • configuration_parameter__value

    • 在调用过程时,添加或更改对配置参数进行的赋值。如果 valueDEFAULT ,或相对应地使用了 RESET ,则会删除该过程的局部设置,以便使用在过程环境中存在的值执行该过程。使用 RESET ALL 清除所有过程局部设置。 SET FROM CURRENT 保存执行 ALTER PROCEDURE 时为该参数指定的值,该值作为在进入该过程时应用的值。

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

  • RESTRICT

    • 与 SQL 标准一致性不相关。

Examples

要将拥有两个 integer 类型参数的 insert_data 过程重命名为 insert_record

ALTER PROCEDURE insert_data(integer, integer) RENAME TO insert_record;

要将拥有两个 integer 类型参数的 insert_data 过程的所有者更改为 joe

ALTER PROCEDURE insert_data(integer, integer) OWNER TO joe;

要将拥有两个 integer 类型参数的 insert_data 过程的架构更改为 accounting

ALTER PROCEDURE insert_data(integer, integer) SET SCHEMA accounting;

要将 insert_data(integer, integer) 过程标记为依赖于 myext 扩展:

ALTER PROCEDURE insert_data(integer, integer) DEPENDS ON EXTENSION myext;

要调整自动为过程设置的搜索路径:

ALTER PROCEDURE check_password(text) SET search_path = admin, pg_temp;

禁用 search_path 的自动设置,针对某个过程:

ALTER PROCEDURE check_password(text) RESET search_path;

如今过程将根据调用者所使用的搜索路径执行。

Compatibility

该声明部分兼容 SQL 标准中的 ALTER PROCEDURE 声明。该标准允许修改更多过程特性,但无法重命名过程、将过程设为安全定义方、将配置参数值附加到过程,或更改过程的所有者、架构或易失性。该标准还要求使用 RESTRICT 关键字,而在 PostgreSQL 中该关键字是可选的。