PostgreSQL批量删除函数脚本

492 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路


在PostgreSQL中,我们想要删除函数的时候必须得加上函数的参数。

例如下面的函数:

bill=#  DROP FUNCTION f_add(c1 integer, c2 integer);
DROP FUNCTION
bill=# create function f_add(c1 int,c2 int) returns int
as $$
declare
v_total int;
begin
v_total = c1 + c2;
return v_total;
end;
$$ language plpgsql;
CREATE FUNCTION

我只指定函数名去删除是不行的:

bill=# drop function f_add();
ERROR:  function f_add() does not exist

必须得带上参数才可以删掉:

bill=# DROP FUNCTION f_add(c1 integer, c2 integer);
DROP FUNCTION

我们可以通过下面的脚本来获取批量删除函数的语句:

SELECT FORMAT('DROP FUNCTION %s(%s);'
             ,p.oid::regproc
             ,pg_get_function_identity_arguments(p.oid))
FROM pg_proc AS p 
INNER JOIN pg_namespace AS n 
	ON p.pronamespace = n.oid 
WHERE n.nspname NOT IN ('pg_catalog', 'information_schema');