如何显示完整的存储过程代码?

时间:2010-08-19 18:11:44

标签: postgresql stored-procedures

如何查看存储过程/函数?

假设我有一个没有原始定义的旧函数 - 我想看看它在pg / psql中做了什么,但我似乎无法找到一种方法来做到这一点。

使用Postgres版本8.4.1

9 个答案:

答案 0 :(得分:209)

psql中的

\df+ <function_name>

答案 1 :(得分:122)

psql中的

\ef <function_name>。它将为整个功能提供可编辑的文本。

答案 2 :(得分:49)

SELECT prosrc FROM pg_proc WHERE proname = 'function_name';

这告诉函数处理程序如何调用该函数。它可能是解释语言,链接符号,文件名或其他任何东西的函数的实际源代码,具体取决于实现语言/调用约定

答案 3 :(得分:19)

使用pgAdmin或使用pg_proc获取存储过程的来源。 pgAdmin做同样的事情。

答案 4 :(得分:12)

使用\df列出Postgres中的所有存储过程。

答案 5 :(得分:7)

如果有人想知道如何快速查询目录表并使用pg_get_functiondef()函数,那么示例查询:

SELECT n.nspname AS schema
      ,proname AS fname
      ,proargnames AS args
      ,t.typname AS return_type
      ,d.description
      ,pg_get_functiondef(p.oid) as definition
--      ,CASE WHEN NOT p.proisagg THEN pg_get_functiondef(p.oid)
--            ELSE 'pg_get_functiondef() can''t be used with aggregate functions'
--       END as definition
  FROM pg_proc p
  JOIN pg_type t
    ON p.prorettype = t.oid
  LEFT OUTER
  JOIN pg_description d
    ON p.oid = d.objoid
  LEFT OUTER
  JOIN pg_namespace n
    ON n.oid = p.pronamespace
 WHERE NOT p.proisagg
   AND n.nspname~'<$SCHEMA_NAME_PATTERN>'
   AND proname~'<$FUNCTION_NAME_PATTERN>'

答案 6 :(得分:0)

通常情况下,您使用像pgAdmin这样的数据库管理器应用程序,浏览到您感兴趣的对象,然后右键单击“以创建脚本”或类似方式。

您是否尝试这样做......没有管理应用程序?

答案 7 :(得分:0)

如果您已在系统中对其进行配置,也可以通过phpPgAdmin获得

第1步:选择您的数据库

第2步:点击查找按钮

第3步:将搜索选项更改为功能,然后单击查找。

您将获得已定义函数的列表。您还可以按名称搜索函数,希望此答案对其他人有帮助。

答案 8 :(得分:-3)

要查看存储过程/函数中编写的完整代码(查询),请在命令下方使用:

sp_helptext procedure/function_name
函数名称和过程名称的

不要添加前缀dbo。或“ sys”。

不要在过程或函数名称的末尾添加方括号,也不要传递参数。

使用sp_helptext关键字,然后仅传递过程/函数名称。

使用以下命令查看为过程编写的完整代码:

sp_helptext ProcedureName

使用以下命令查看为该功能编写的完整代码:

sp_helptext FunctionName