How to find all user-defined (not extension-related) functions?
有一个类似的问题,但它是模棱两可的,并且接受的答案表明这个问题与我的略有不同。
如何查找不属于任何扩展程序(如PostGIS)的用户定义函数? 链接问题的答案提供了一个返回大多数PostGIS函数的查询(噪音为我的目的),我不太清楚它是否足以改变它只返回我的函数(缺乏详细解释为什么它的工作方式和方式如何 更改设置)。
现在我没有C函数,我的所有函数都在模式公共中 - 你可以使用这个事实,但要明确如何释放这些约束。 如果确切的扩展列表很重要,那么现在假设只是PostGIS,但是如果从代码中不明显的话,可以解释如何将其他列表添加到列表中。
正如@Craig所评论的,依赖关系存储在
查询可能如下所示(Postgres 11或更高版本):
1 2 3 4 5 6 7 8 9 | SELECT p.proname AS function_name , pg_get_function_identity_arguments(p.oid) AS parameter_list , pg_get_functiondef(p.oid) AS function_def -- CREATE FUNCTION statement FROM pg_proc p LEFT JOIN pg_depend d ON d.objid = p.oid AND d.deptype = 'e' -- would depend on extension WHERE p.pronamespace = 'public'::regnamespace -- your schema(s) of interest AND d.objid IS NULL -- no such dependency AND p.prokind = 'f'; -- only plain functions |
这取决于所有功能,具体取决于结果的扩展名。 关于依赖类型
DEPENDENCY_EXTENSION (e)
The dependent object is a member of the extension that is the
referenced object (seepg_extension ). The dependent object can be
dropped only viaDROP EXTENSION on the referenced object. Functionally
this dependency type acts the same as an internal dependency, but it's
kept separate for clarity and to simplify pg_dump.
并且
f for a normal function,p for a procedure,a for an aggregate function, orw for a window function
这是Postgres 11中的新功能。对于Postgres 10或更早版本使用:
1 2 3 4 | SELECT ... ... AND NOT proisagg -- no aggregate functions AND NOT proiswindow -- no window functions |
还没有程序。
在此处的手册中找到
- 如何获取函数参数列表(所以我可以删除一个函数)