On this page
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
- 参数的模式:
IN
或VARIADIC
。如果省略,则默认值为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。
- 更改该过程是否为安全定义程序。为了符合 SQL,将忽略关键字
configuration_parameter
value
- 调用过程时,添加或更改要对配置参数进行的分配。如果*
value
*为DEFAULT
或等效地使用RESET
,则将删除过程本地设置,以便过程以其环境中存在的值执行。使用RESET ALL
清除所有本地过程设置。SET FROM CURRENT
将执行ALTER PROCEDURE
时的当前参数值保存为进入过程时要应用的值。
- 调用过程时,添加或更改要对配置参数进行的分配。如果*
有关允许的参数名称和值的更多信息,请参见SET和Chapter 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