Bor*_*rys 0 postgresql stored-procedures postgresql-9.2
我需要获取db中每个函数的DDL以进行版本控制.这是查询,但它仅适用于公共模式中的函数.当我试图使用它来创建存在于公共和匹配模式的函数时,我得到子查询返回太多行的错误.
通过使用此查询检查pg_proc中的所有值:
select * from pg_proc where proname = 'match_group_1_3_2';
Run Code Online (Sandbox Code Playgroud)
只有更改的值是pronamespace:

如何区分两种(或更多)功能?如果它们在同一个模式中但具有不同的参数,如何区分它们?(通过重载)
由于性能问题,我需要使用本机postgres目录,而不是ANSI类型.
有更多系统目录信息功能可以为您提供其他信息.
您可以从系统表中获取架构名称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%';
Run Code Online (Sandbox Code Playgroud)
这应该在数据库中的任何模式中找到函数.