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_USER | SESSION_USER }
ALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
    SET SCHEMA new_schema
ALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
    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特权。要更改所有者,您还必须是新拥有角色的直接或间接成员,并且该角色必须对过程的模式具有CREATE特权。 (这些限制规定,更改所有者不会通过删除并重新创建过程来做您做不到的任何事情.但是,超级用户仍然可以更改任何过程的所有权.)

Parameters

  • name

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

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

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

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

    • 过程的新名称。
  • new_owner

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

    • 该过程的新架构。
  • extension_name

    • 该过程所依赖的 extensions。
  • [ EXTERNAL ] SECURITY INVOKER
    [ EXTERNAL ] SECURITY DEFINER

    • 更改该过程是否为安全定义程序。为了符合 SQL,将忽略关键字EXTERNAL。有关此功能的更多信息,请参见CREATE PROCEDURE
  • configuration_parameter
    value

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

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

  • 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)标记为依赖于 extensionsmyext

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 中是可选的。

See Also

CREATE PROCEDURE, DROP PROCEDURE, ALTER FUNCTION, ALTER ROUTINE