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

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

Patricia Arquette
发布: 2024-12-29 04:20:10
原创
986 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板