DROP ROUTINE — 删除一个例程
DROP ROUTINE [ IF EXISTS ]name[ ( [ [argmode] [argname]argtype[, ...] ] ) ] [, ...] [ CASCADE | RESTRICT ]
DROP ROUTINE 删除一个或多个现有例程的定义。“例程”一词包括聚集函数、普通函数和过程。参数的说明、更多示例以及更多细节请参见 DROP AGGREGATE、DROP FUNCTION 和 DROP PROCEDURE 下的内容。
DROP ROUTINE 使用的查找规则与 DROP PROCEDURE 的基本相同;特别地,DROP ROUTINE 与该命令一样,会把不含 argmode 标记的参数列表视为可能在按 SQL 标准的定义(即 OUT 参数包含在列表中)进行解释。(DROP AGGREGATE 和 DROP FUNCTION 不会这样做。)
在某些情况下,当不同种类的例程共用同一个名字时,DROP ROUTINE 可能会因歧义错误而失败,而更具体的命令(例如 DROP FUNCTION 等)却能成功。更仔细地指定参数类型列表也能解决这类问题。
这些查找规则也被其他作用于现有例程的命令使用,例如 ALTER ROUTINE 和 COMMENT ON ROUTINE。
删除例程 foo(用于类型 integer):
DROP ROUTINE foo(integer);
无论 foo 是聚集、函数还是过程,这条命令都能正常工作。
该命令符合 SQL 标准,并有以下 PostgreSQL 扩展:
标准只允许每条命令删除一个例程。
IF EXISTS 选项是一种扩展。
指定参数模式和参数名称的能力是一种扩展,并且在给定了模式时查找规则会有所不同。
用户可定义的聚集函数是一种扩展。