在pg中drop function会报错不存在,或者报错语法错误:
1 2 3 |
mydb01=>drop function getcpumem; ERROR:Syntax error ator near";" LINE 1: drop function getcpumem; |
1 2 3 |
mydb01=>drop function getcpumem(integer,integer,integer,integer); ERROR:function getcpumem(integer,integer,integer,integer) does not exist mydb01=> |
在这里需要注意一下,drop function的时候,需要带上function中定义的各个变量的类型。语法是:
DROP FUNCTION [ IF EXISTS ] name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] [, ...]
[ CASCADE | RESTRICT ]
在pg中,我们可以通过pg_proc看有哪些funcition,但是pg_proc中的变量类型,虽然在proargtypes中有记录,但是它是一个数字编码,需要通过::regtype[]来转换一下成可识别的类型。
所以,你要先找出这个function的各个变量的类型,可以用下面的语句查找:
1 2 3 4 |
SELECT proname, proargtypes::regtype[], nspname FROM pg_proc JOIN pg_namespace ON pg_proc.pronamespace = pg_namespace.oid WHERE proname = 'getcpumem'; |
此时运行
1 |
drop function getcpumem(integer,numeric,numeric,varchar,integer,numeric,numeric); |
就可以正常删除了。