我需要获取db中每个函数的DDL以进行版本控制。 Here是查询,但它仅适用于公共模式中的函数。当我试图使用它来创建存在于公共和匹配模式的函数时,我得到子查询返回太多行的错误。
使用此查询检查pg_proc中的所有值:
select * from pg_proc where proname = 'match_group_1_3_2';
只有更改的值是pronamespace:
如何区分两种(或更多)功能?如果它们在同一个模式中但具有不同的参数,如何区分它们? (通过重载)
由于性能问题,我需要使用本机postgres目录,而不是ANSI类型。
答案 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%';
这应该在数据库中的任何模式中找到函数。