我的问题与这里发布的问题的标题相似,但是那里的答案与我需要的要复杂得多。
我的问题很简单...我有一个函数名称说func1
,我想知道这个函数是否以及在何处实现的。获取它的位置,它的参数和代码。我尝试使用pg_proc
构建一个:
select proname,prosrc from pg_proc where proname like 'func1';
如何添加架构名称、函数代码(文本)和函数参数列表?
另一个让我好奇的问题...如果我搜索lower
而不是func1
,我可以让它工作吗?较低的是用户未实现的内置函数。
这个问题并没有解决我的整个问题。 因为它没有解释如何在定义函数的模式中获取,也没有解释它是否适用于以 SQL 标准构建的函数,如 lower(字符串)。
一切都在pg_proc
表中。
函数的源代码位于prosrc
字段中。pronamespace
字段是架构标识符(如果需要其名称,则需要联接到pg_namespace
表)。
根据pg_proc
中的信息重建参数列表并不简单,但SELECT pg_get_function_arguments(oid) FROM pg_proc
会为您完成。您可能会发现一些有用的相关函数。
是的,lower()
是pg_proc
,大多数内置函数也是如此(尽管一些,如CAST()
和COALESCE()
,实际上是语法的一部分)。但只有一小部分是用 SQL 编写的;对于大多数人来说,prosrc
字段只是在底层 C 代码中给出函数的名称。