67

我引用这个 来启用 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

4

3 回答 3

8

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

PGAdmin

更新postgresql.conf文件以加载调试库时,我在 Windows 上运行 PGAdmin,因此文件位于:

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 数据库,这个要点在解释如何下载依赖项以启用调试方面做得很好。确保在安装时以 root 身份运行。

很容易错过的部分是针对您要调试的实际数据库发出命令。对于 PostgreSQL 上的较新版本,您需要做的就是:

CREATE EXTENSION IF NOT EXISTS pldbgapi;

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

一些额外的注意事项:

  • 如上所述,只能在以超级用户帐户运行时进行调试
  • 他们的文档中,您只能调试 pl/pgsql 函数。因此,如果您的函数显示类似LANGUAGE cPGAdmin 之类的内容,则在您选择该函数时甚至不会显示右键单击“调试”菜单选项。寻找有的东西,LANGUAGE plpgsql调试菜单应该会显示出来。
于 2016-01-21T23:25:45.680 回答
2

肯,

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

我隐约记得你曾经遇到过这个问题,但那是当我的 postgresql.conf 中除了 pldebugger 之外还有另一个共享库时。不记得是哪一个,但删除另一个共享库解决了我的问题。

希望其中一些建议有所帮助,里贾纳

于 2012-01-02T18:18:40.990 回答
1

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

于 2012-02-03T12:16:44.950 回答