ALTER PROCEDURE — change the definition of a procedure
ALTER PROCEDUREname
[ ( [ [argmode
] [argname
]argtype
[, ...] ] ) ]action
[ ... ] [ RESTRICT ] ALTER PROCEDUREname
[ ( [ [argmode
] [argname
]argtype
[, ...] ] ) ] RENAME TOnew_name
ALTER PROCEDUREname
[ ( [ [argmode
] [argname
]argtype
[, ...] ] ) ] OWNER TO {new_owner
| CURRENT_USER | SESSION_USER } ALTER PROCEDUREname
[ ( [ [argmode
] [argname
]argtype
[, ...] ] ) ] SET SCHEMAnew_schema
ALTER PROCEDUREname
[ ( [ [argmode
] [argname
]argtype
[, ...] ] ) ] DEPENDS ON EXTENSIONextension_name
其中action
是下列之一: [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER SETconfiguration_parameter
{ TO | = } {value
| DEFAULT } SETconfiguration_parameter
FROM CURRENT RESETconfiguration_parameter
RESET ALL
ALTER PROCEDURE
更改一个过程的定义。
要使用ALTER PROCEDURE
,你必须拥有该过程。要更改一个过程的方案,你还必须有新方案上的CREATE
特权。要更改拥有者,你还必须是新拥有角色的直接或间接成员,并且那个角色在该过程的方案上拥有CREATE
特权(这些限制强制更新拥有者无法做到通过删除和重建该过程无法做到的事情。不过,超级用户总是能够更改任何过程的拥有关系)。
name
一个现有的过程的名字(可以被方案限定)。如果没有指定参数列表,这个名字必须在其方案中唯一。
argmode
参数的模式:IN
或VARIADIC
。如果被省略,默认是IN
。
argname
参数的名字。注意ALTER PROCEDURE
实际上并不关心参数名,因为只需要参数的数据类型来确定过程的身份。
argtype
如果该过程有参数,这是参数的数据类型(可以被方案限定)。
new_name
该过程的新名字。
new_owner
该过程的新拥有者。注意,如果这个过程被标记为SECURITY DEFINER
,接下来它将被作为新拥有者执行。
new_schema
该过程的新方案。
extension_name
该过程所依赖的扩展的名称。
[ EXTERNAL ] SECURITY INVOKER
[ EXTERNAL ] SECURITY DEFINER
更改该过程是否为一个安全性定义器。关键词EXTERNAL
由于SQL符合性的原因被忽略。更多有关这个能力的信息请见CREATE PROCEDURE。
configuration_parameter
value
增加或者更改在调用该过程时,要对一个配置参数做的赋值。如果value
是DEFAULT
或者等效的值,则会使用RESET
,过程本地的设置会被移除,这样该过程的执行就会使用其所处环境中的值。使用RESET ALL
可以清除所有的过程本地设置。SET FROM CURRENT
会把ALTER PROCEDURE
执行时该参数的当前值保存为进入该过程时要被应用的值。
关于允许的参数名和参数值的更多信息请见SET和Chapter 19。
RESTRICT
为了符合SQL标准会被忽略。
要重命名具有两个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;
现在这个过程将用其调用者所使用的任何搜索路径执行。
这个语句与SQL标准中的ALTER PROCEDURE
语句部分兼容。标注你允许修改一个过程的更多性质,但是不提供重命名过程、让过程成为安全性定义器、为过程附加配置参数值或者更改过程的拥有者、方案或者可变性的能力。标准还要求RESTRICT
关键字,而它在PostgreSQL中是可选的。