1

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

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

select * from pg_proc where proname = 'match_group_1_3_2';

只有改变的值是 pronamespace:

在此处输入图像描述

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

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

4

1 回答 1

9

还有更多系统目录信息功能可以为您提供附加信息。
您可以从系统表中获取架构名称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%';

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

于 2013-06-14T14:00:18.373 回答