如何通过以下方式获取所有用户定义函数的列表SQL
query ?
我找到这段代码here
SELECT p.proname, p.pronargs, t.typname
FROM pg_proc p, pg_language l, pg_type t
WHERE p.prolang = l.oid
and p.prorettype = t.oid
and l.lanname = 'c'
ORDER BY proname;
但这得到了 C 函数
如何获取用户定义的过程语言函数,例如编写为plpgsql
语言?
考虑:
select
pp.proname,
pl.lanname,
pn.nspname,
pg_get_functiondef(pp.oid)
from pg_proc pp
inner join pg_namespace pn on (pp.pronamespace = pn.oid)
inner join pg_language pl on (pp.prolang = pl.oid)
where pl.lanname NOT IN ('c','internal')
and pn.nspname NOT LIKE 'pg_%'
and pn.nspname <> 'information_schema';
也可以看看:在 postgresql 中查找现有函数的脚本的命令是什么?
Use pg_get_functiondef
or the prosrc
专栏来自pg_proc
直接地。关键的想法是加入pg_namespace
并过滤掉 PostgreSQL 目录函数,这可能足以满足大多数用途:
FROM pg_proc pp INNER JOIN pg_namespace ON (pp.pronamespace = pn.oid)
WHERE pn.nspname <> 'pg_catalog'
获取源代码的麻烦用户自定义功能决定什么user方法。可以创建多种类型的函数:
- 函数使用
CREATE EXTENSION
.
- 由 PostgreSQL 创建的函数。
- 由管理员编译和安装的功能。
拥有足够权限的超级用户可以在以下位置定义函数pg_proc
,但通常不会。
由于只有超级用户才能创建 C 语言函数,因此排除它们。此类功能可以由管理员(但普通用户)自定义安装在特定数据库上。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)