系统目录中的哪个部分存储了功能体?

时间:2014-03-05 06:58:39

标签: postgresql stored-procedures

我正在尝试为我的数据库构建一个文档系统,我希望包含我的函数和触发器的来源。

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

2 个答案:

答案 0 :(得分:3)

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

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

转换为object identifier regprocedure是获取func_oid的简单方法,您可以将其输入上述函数。

Per documentation on pg_catalog.pg_proc:

  

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

仅检索正文:

SELECT prosrc 
FROM   pg_proc
WHERE  oid = 'my_schema.my_func(int)'::regprocedure

答案 1 :(得分:0)

对于这样的事情,我使用pg_dump --schema_only [database],但现在我使用我的专业工具以易于比较的格式报告模式:

http://code.activestate.com/recipes/576557-dump-postgresql-db-schema-to-text/

当然它会读取函数/过程体/