我试图为我的数据库建立一个文档系统,我想包括我的函数和触发器的来源。
我设法找到了函数和触发器的所有元数据,但这些函数和触发器的实际主体存储在哪里?

最佳答案

使用函数pg_get_functiondef()获得完整的函数定义:

SELECT pg_get_functiondef('my_schema.my_func(int)'::regprocedure)

转换到object identifier regprocedure是获取函数的oid的最简单方法,您可以将其输入到上述函数。
The manual on pg_catalog.pg_proc:
对于编译的函数,无论是内置的还是动态加载的,prosrc
包含函数的C语言名称(链接符号)。对于所有其他人
当前已知的语言类型,prosrc包含函数的源文本。
要仅检索函数体,请执行以下操作:
SELECT prosrc
FROM   pg_proc
WHERE  oid = 'my_schema.my_func(int)'::regprocedure;

09-30 00:03