【问题标题】:How to find if a function exists in PostgreSQL and where?如何查找 PostgreSQL 中是否存在函数以及在哪里?
【发布时间】:2015-06-14 06:38:56
【问题描述】:

我的问题与here 发布的问题的标题类似,但是答案与我需要的不同,而且比我需要的要复杂得多。

我的问题很简单...我有一个函数名func1,我想知道这个函数是否以及在哪里实现。获取它的位置、参数和代码。我尝试使用pg_proc 构建一个:

select proname,prosrc from pg_proc where proname like 'func1';

如何添加架构名称、函数代码(文本)和函数参数列表?

另一个我很好奇的问题...如果我将搜索 lower 而不是 func1,我可以让它工作吗? lower 是一个build in function,它不是由用户实现的。

question 不能解决我的全部问题。因为它没有解释如何在什么模式中定义函数,也没有解释它是否适用于 SQL 标准中构建的函数,如 lower(string)。

【问题讨论】:

  • 我不是投票给你的人,但你要问的是丑陋、丑陋、丑陋!几乎可以肯定,有更好的方法来解决您要解决的任何问题。
  • Google 没有回答它.. 甚至没有关闭,也没有关于 stackoverflow 的任何其他问题。
  • 我讨厌听起来轻率,但如果没有人尝试过做一些甚至有点相似的事情,那应该会告诉你一些事情。您要解决的最初问题是什么?
  • 这是我试图解决的原始问题。我正在研究具有数百个函数的现有数据库,如果我可以从它的名称中获取函数代码,它将更容易导航。没有人尝试做类似的事情这一事实并没有说明什么 - 这里的大多数问题都是以前没有人做过的事情,如果做过,那么你会在搜索中找到它,并且永远不会问问题。
  • 我不确定您所说的“导航”是什么意思。您是否想完成类似于 IDE 或数据库应用程序所做的事情并以编程方式列出所有功能,以便您查看它们的作用?如果为真,您最好使用可以简单地将所有函数/存储过程转储为 SQL 的数据库应用程序。没有必要重新发明轮子。

标签: sql postgresql


【解决方案1】:

pg_proc table 中应有尽有。

函数的源代码在prosrc 字段中。 pronamespace 字段是架构标识符(如果你想要它的名字,你需要加入pg_namespace 表)。

pg_proc 中的信息重建参数列表一点也不简单,但SELECT pg_get_function_arguments(oid) FROM pg_proc 会为您完成。 a few related functions 可能对您有用。

是的,lower()pg_proc 中,大多数内置函数也是如此(尽管有一些,如CAST()COALESCE(),实际上是grammar 的一部分)。但只有一小部分是用 SQL 编写的;大多数情况下,prosrc 字段只是给出底层C code 中函数的名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-18
    • 1970-01-01
    • 2011-12-21
    • 1970-01-01
    • 1970-01-01
    • 2020-05-02
    • 1970-01-01
    相关资源
    最近更新 更多