您需要编写一个函数,该函数采用函数名称,并从 中查找每个重载及其参数类型
information_schema,然后
DROp为每个重载构建并执行 a 。
编辑:结果证明这比我想象的要困难得多。看起来
information_schema它的
routines目录中没有保留必要的参数信息。所以你需要使用 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;我在一个重载的函数上成功地测试了这个。它很快被组合在一起,但作为一个实用函数运行良好。我建议在实际使用之前进行更多测试,以防我忽略了一些东西。



