栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何获取函数参数列表(以便我可以删除函数)

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何获取函数参数列表(以便我可以删除函数)

Postgres 有一个专门用于此目的的功能。随 Postgres 8.4 引入。手册:

pg_get_function_identity_arguments(func_oid)
…获取参数列表以标识函数(无默认值)…

pg_get_function_identity_arguments
返回标识函数所需的参数列表,例如,以它需要出现在 中的形式
ALTER FUNCTION
。这种形式省略了默认值。

使用它(以及

format()
)Postgres 9.1 引入的),以下查询生成 DDL 语句以删除与您的搜索词匹配的函数:

SELECt format('DROP %s %I.%I(%s);' , CASE WHEN p.proisagg THEN 'AGGREGATE' ELSE 'FUNCTION' END , n.nspname , p.proname , pg_catalog.pg_get_function_identity_arguments(p.oid)  ) AS stmtFROM   pg_catalog.pg_proc pJOIN   pg_catalog.pg_namespace n ON n.oid = p.pronamespaceWHERe  p.proname = 'dblink'          -- function name-- AND n.nspname = 'public'          -- schema name (optional)-- AND pg_catalog.pg_function_is_visible(p.oid) -- function visible to userORDER  BY 1;

系统目录

pg_proc
Postgres 11 中发生了变化。
proisagg
替换为
prokind
,添加了真正的存储过程。你需要适应

返回:

       stmt--------------------------------------------------- DROp FUNCTION public.dblink(text); DROP FUNCTION public.dblink(text, boolean); DROP FUNCTION public.dblink(text, text); DROP FUNCTION public.dblink(text, text, boolean); 

在示例中找到四个匹配项,因为 dblink 使用了重载函数。有选择地
运行

DROP
语句!

或者**,您可以使用方便的转换为[对象标识符类型

regprocedure
**,该类型返回一个完整的函数签名,包括参数类型:

-- SET LOCAL search_path = '';  -- optional, to get all names schema-qualifiedSELECT format('DROP %s %s;' , CASE WHEN proisagg THEN 'AGGREGATE' ELSE 'FUNCTION' END , oid::regprocedure  ) AS stmtFROM   pg_catalog.pg_procWHERe  proname = 'dblink'   -- function nameORDER  BY 1;


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/393714.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号