我引用this启用PostgreSQL服务器中的调试器,以便通过使用pgadmin逐步检查代码来调试plpgsql函数。

我已经在shared_preload_libraries = '$libdir/plugins/plugin_debugger.dll'中设置了postgresql.conf,运行了pldbgapi.sql,然后重新启动了服务器。

这些步骤应该已经成功运行,并且应该成功加载plugin_debugger.dll,可以使用命令show shared_preload_libraries进行验证,并且可以右键单击pgAdmin中的函数在上下文菜单中看到调试选项。

选择“调试”->“调试”时,将弹出一个窗口,允许我输入输入参数的值。但是之后,当我按下OK时,它根本没有响应。

有什么想法还是在服务器上调试器的设置中错过了一些东西?

我正在使用PostgreSQL 8.3和pgAdmin 1.14

最佳答案

您必须在两个地方启用调试。在PGAdmin和数据库本身上。您引用的那篇文章在解释它方面做得很棒,但是有些细微差别。

PGAdmin

在更新postgresql.conf文件以加载调试库时,我是running PGAdmin on Windows,因此文件位于此处:

C:\Program Files\PostgreSQL\9.4\data\postgresql.conf

plugin_debugger.dll的路径实际上是
$libdir/plugin_debugger.dll


$libdir/plugins/plugin_debugger.dll

如文章中所指定。因此,您的postgresql.conf将需要这样的一行
shared_preload_libraries = '$libdir/plugin_debugger.dll'

如有疑问,请搜索实际的.dll。如果您使用的是Linux,则要查找的文件是plugin_debugger.so。不要忘记,更改postgresql.conf文件将需要重新启动才能使更改生效。

PostgreSQL数据库

假设您正在Linux服务器上运行PostgreSQL数据库,那么this gist可以很好地说明如何下载依赖项以启用调试。确保在安装时以root用户身份运行。

容易错过的部分是针对要调试的实际数据库发出命令。对于PostgreSQL上的较新版本,您需要做的是:
CREATE EXTENSION IF NOT EXISTS pldbgapi;

如果那没有返回错误,那么您应该一切顺利。

一些其他注意事项:
  • 如上所述,您只能在以 super 用户帐户
  • 运行时进行调试
  • their docs中,您只能调试pl / pgsql函数。因此,如果您的函数说出LANGUAGE c之类的字样,则在选择函数时,PGAdmin甚至不会显示右键单击“调试”菜单选项。查找包含LANGUAGE plpgsql的内容,然后应显示“调试”菜单。
  • 关于debugging - 使用pgAdmin调试PostgreSQL函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7865615/

    10-09 18:21
    查看更多