在 Postgres 中,在向现有函数添加或删除参数时,管理存储在文本文件中的函数可能会很困难。为了解决这个问题,存在一种通配符方法来删除具有特定名称的所有函数,无论参数的数量或类型如何。
执行以下查询来生成 DDL 语句删除具有特定名称的所有函数:
SELECT 'DROP FUNCTION ' || oid::regprocedure FROM pg_proc WHERE proname = 'my_function_name' AND pg_function_is_visible(oid);
将 'my_function_name' 替换为您的实际函数名称(区分大小写且不包含双引号)。此查询返回 DROP FUNCTION 语句的列表,其中包含函数所有重载的正确参数类型。
要立即执行 drop 语句,请考虑创建 PL/pgSQL 函数:
CREATE OR REPLACE FUNCTION f_delfunc(_name text, OUT functions_dropped int) LANGUAGE plpgsql AS $func$ 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) INTO functions_dropped, _sql; IF functions_dropped > 0 THEN EXECUTE _sql; END IF; END $func$;
删除所有名为'my_function_name':
SELECT f_delfunc('my_function_name');
该函数将返回删除的函数数量。
以上是如何在不知道参数的情况下安全删除 PostgreSQL 函数?的详细内容。更多信息请关注PHP中文网其他相关文章!