使用pgAdmin调试PostgreSQL函数

时间:2011-10-23 10:34:25

标签: debugging postgresql plpgsql pgadmin

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

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

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

enter image description here

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

enter image description here

任何想法或我在服务器上的调试器设置中遗漏了什么?

我正在使用PostgreSQL 8.3和pgAdmin 1.14

3 个答案:

答案 0 :(得分:6)

您必须在两个地方启用调试。在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;

如果这不会返回错误,那么你应该好好去。

还有一些值得注意的事项:

  • 如上所述,您只能在以超级用户帐户身份运行时进行调试
  • their docs开始,您只能调试pl / pgsql函数。因此,如果您的函数显示类似LANGUAGE c PGAdmin的内容,则在您选择该函数时甚至会显示右键单击“调试”菜单选项。查找具有LANGUAGE plpgsql且调试菜单应显示的内容。

答案 1 :(得分:2)

您是否尝试过pgAdmin 1.8以排除PgAdmin 1.14 / PostgreSQL 8.3交互的问题。自从我使用8.3以来,已经有一段时间了 - 我所写的文章 - 你指的是我用1.14 / PostgreSQL 9.1进行测试,所以很可能是与旧版本交互的问题。不幸的是,我再也没有8.3了。

我依稀记得曾经遇到过这个问题,但是当我在postgresql.conf中有另一个共享库时,除了pldebugger之外。不记得是哪一个,但删除其他共享库修复了我的问题。

希望其中一些建议有所帮助, 伊利

答案 2 :(得分:1)

我遇到了同样的问题。 确保在postgres.conf中加载的 only 共享库是调试器。 没有其他的。甚至不是剖析器。 如果在尝试调试函数时遇到SSL错误,请重新连接到服务器。