管理存储在文本文件中的函数时,添加或修改函数参数可能会产生重载。删除原始函数需要手动列出所有参数类型,这可能很麻烦。
为了解决这个问题,以下查询生成 DDL 语句来删除具有给定名称的所有函数,无论参数:
SELECT 'DROP FUNCTION ' || oid::regprocedure FROM pg_proc WHERE proname = 'my_function_name' -- function name without schema-qualification AND pg_function_is_visible(oid); -- restrict to current search path
为了立即执行生成的语句,以下可以使用 PL/pgSQL 函数:
CREATE OR REPLACE FUNCTION f_delfunc(_name text, OUT functions_dropped int) LANGUAGE plpgsql AS $func$ -- drop all functions with given _name in the current search path, regardless of function parameters DECLARE _sql text; BEGIN SELECT count(*)::int , 'DROP FUNCTION ' || string_agg(oid::regprocedure::text, '; DROP FUNCTION ') FROM pg_catalog.pg_proc WHERE proname = _name AND pg_function_is_visible(oid) -- restrict to current search path INTO functions_dropped, _sql; -- count only returned if subsequent DROPs succeed IF functions_dropped > 0 THEN -- only if function(s) found EXECUTE _sql; END IF; END $func$;
按如下方式调用函数,删除所有与指定名称匹配的函数:
SELECT f_delfunc('my_function_name');
函数返回删除的函数数量或 0如果没有找到。
以上是如何在 PostgreSQL 中按名称安全删除所有重载函数?的详细内容。更多信息请关注PHP中文网其他相关文章!