【问题标题】:Get functions DDL command获取函数 DDL 命令
【发布时间】:2013-06-14 13:00:20
【问题描述】:

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

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

select * from pg_proc where proname = 'match_group_1_3_2';

只有更改的值是 pronamespace:

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

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

【问题讨论】:

    标签: postgresql stored-procedures postgresql-9.2


    【解决方案1】:

    还有更多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%';
    

    这应该会在数据库的 any 模式中找到函数。

    【讨论】:

    • 这正是我正在寻找的。谢谢。 - 我正在探索 information_schema.routines,但没有标题和参数部分。哈哈。
    猜你喜欢
    • 2020-03-10
    • 2018-09-11
    • 2017-03-16
    • 2016-01-02
    • 2012-01-09
    • 2010-09-21
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    相关资源
    最近更新 更多