postgresql – DROP FUNCTION不知道参数的数量类型?

postgresql – DROP FUNCTION不知道参数的数量类型?,第1张

概述我保持我的所有功能在一个文本文件与’创建或替换功能somefunction’。 所以如果我添加或更改一些功能我只是馈送文件到psql。 现在,如果我添加或删除参数到一个现有的函数,它创建一个具有相同名称的重载,并删除原来我需要类型在所有的参数类型,确切的顺序是繁琐的。 是否有某种通配符,我可以使用DROP所有函数给定的名称,所以我可以只添加DROP FUNCTION行到我的文件的顶部? 您需要编写 我保持我的所有功能在一个文本文件与’创建或替换功能somefunction’。
所以如果我添加或更改一些功能我只是馈送文件到psql。

现在,如果我添加或删除参数到一个现有的函数,它创建一个具有相同名称的重载,并删除原来我需要类型在所有的参数类型,确切的顺序是繁琐的。

是否有某种通配符,我可以使用DROP所有函数给定的名称,所以我可以只添加DROP FUNCTION行到我的文件的顶部?

您需要编写一个函数,该函数使用函数名,并使用来自information_schema的参数类型查找每个重载,然后为每个重构创建并执行一个DROP。

编辑:结果是比我想象的困难很多。看来,information_schema不会在其例程目录中保留必要的参数信息。所以你需要使用Postgresql的补充表pg_proc和pg_type:

CREATE OR REPLACE FUNCTION udf_dropfunction(functionname text)  RETURNS text AS$BODY$DECLARE    funcrow RECORD;    numfunctions smallint := 0;    numparameters int;    i int;    paramtext text;BEGINFOR funcrow IN SELECT proargtypes FROM pg_proc WHERE proname = functionname LOOP    --for some reason array_upper is off by one for the oIDvector type,hence the +1    numparameters = array_upper(funcrow.proargtypes,1) + 1;    i = 0;    paramtext = '';    LOOP        IF i < numparameters THEN            IF i > 0 THEN                paramtext = paramtext || ',';            END IF;            paramtext = paramtext || (SELECT typname FROM pg_type WHERE oID = funcrow.proargtypes[i]);            i = i + 1;        ELSE            EXIT;        END IF;    END LOOP;    EXECUTE 'DROP FUNCTION ' || functionname || '(' || paramtext || ');';    numfunctions = numfunctions + 1;END LOOP;RETURN 'Dropped ' || numfunctions || ' functions';END;$BODY$  LANGUAGE plpgsql VolATILE  COST 100;

我成功测试这个在一个重载的函数。它被抛在一起很快,但作为一个效用函数很好。我建议在实践中使用它之前测试更多,以防我忽略了一些东西。

总结

以上是内存溢出为你收集整理的postgresql – DROP FUNCTION不知道参数的数量/类型?全部内容,希望文章能够帮你解决postgresql – DROP FUNCTION不知道参数的数量/类型?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/1171790.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存