OTA*_*TAR 9 postgresql postgresql-9.2
如何通过SQL查询获取所有用户定义函数的列表?
我在这里找到这个代码
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;
Run Code Online (Sandbox Code Playgroud)
但这会得到C函数
如何获得用户定义的过程语言函数,例如用plpgsql 语言编写?
Cra*_*ger 25
考虑:
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';
Run Code Online (Sandbox Code Playgroud)
另请参阅:在postgresql中查找现有函数脚本的命令是什么?
直接使用pg_get_functiondef或prosrc列pg_proc.关键的想法是加入pg_namespace并过滤掉PostgreSQL目录函数,这可能适用于大多数目的:
FROM pg_proc pp INNER JOIN pg_namespace ON (pp.pronamespace = pn.oid)
WHERE pn.nspname <> 'pg_catalog'
Run Code Online (Sandbox Code Playgroud)
获取用户定义函数的源代码的麻烦在于决定用户的意思.可以创建许多类型的函数:
CREATE EXTENSION.具有足够资助的超级用户可以定义函数pg_proc,但通常不会.
由于只有超级用户才能创建C语言函数,因此请将其排除.这些功能可以由管理员在特定数据库上自定义安装,但不能由普通用户自定义.
| 归档时间: |
|
| 查看次数: |
6799 次 |
| 最近记录: |