首页 >数据库 >mysql教程 >如何在 PostgreSQL 中按名称安全删除所有重载函数?

如何在 PostgreSQL 中按名称安全删除所有重载函数?

Patricia Arquette
Patricia Arquette原创
2024-12-29 04:20:10981浏览

How to Safely Drop All Overloaded Functions by Name in PostgreSQL?

删除没有指定参数编号/类型的函数

管理存储在文本文件中的函数时,添加或修改函数参数可能会产生重载。删除原始函数需要手动列出所有参数类型,这可能很麻烦。

基本查询

为了解决这个问题,以下查询生成 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn