获取函数DDL命令

时间:2013-06-14 13:00:20

标签: postgresql stored-procedures postgresql-9.2

我需要获取db中每个函数的DDL以进行版本控制。 Here是查询,但它仅适用于公共模式中的函数。当我试图使用它来创建存在于公共和匹配模式的函数时,我得到子查询返回太多行的错误。

使用此查询检查pg_proc中的所有值:

select * from pg_proc where proname = 'match_group_1_3_2';

只有更改的值是pronamespace:

enter image description here

如何区分两种(或更多)功能?如果它们在同一个模式中但具有不同的参数,如何区分它们? (通过重载)

由于性能问题,我需要使用本机postgres目录,而不是ANSI类型。

1 个答案:

答案 0 :(得分:6)

还有更多system catalog information functions可以为您提供更多信息 您可以从系统表pg_namespace中获取架构名称:

SELECT n.nspname AS schema_name
      ,p.proname AS function_name
      ,pg_get_functiondef(p.oid) AS func_def
      ,pg_get_function_arguments(p.oid) AS args
      ,pg_get_function_result(p.oid) AS result
FROM   pg_proc p
JOIN   pg_namespace n ON n.oid = p.pronamespace
WHERE  p.proname ILIKE '%match_group_1_3_2%';

这应该在数据库中的任何模式中找到函数。