功能体在系统目录中的哪里存储?

Pat*_*ick 1 postgresql stored-procedures

我正在尝试为我的数据库构建一个文档系统,我想包括我的函数和触发器的源代码。

我设法找到了有关函数和触发器的所有元数据,但是这些函数和触发器的实际主体存储在哪里?

Erw*_*ter 5

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

SELECT pg_get_functiondef('my_schema.my_func(int)'::regprocedure)
Run Code Online (Sandbox Code Playgroud)

强制转换为对象标识符regprocedure是获取oid函数的最简单方法,您可以将其提供给上述函数。

手册pg_catalog.pg_proc

对于内置和动态加载的已编译函数,均prosrc 包含函数的C语言名称(链接符号)。对于所有其他当前已知的语言类型,prosrc包含函数的源文本。

仅检索函数体:

SELECT prosrc 
FROM   pg_proc
WHERE  oid = 'my_schema.my_func(int)'::regprocedure;
Run Code Online (Sandbox Code Playgroud)