使用pgAdmin调试PostgreSQL函数

67

我参考这篇文章,通过在PostgreSQL服务器中启用调试器,并使用pgadmin逐步调试plpgsql函数来进行调试。

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

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

输入图像描述信息

当选择“调试” -> “调试”时,会弹出一个窗口让我输入输入参数的值。但是之后,当我按下OK时,它完全没有反应。

输入图像描述信息

有什么想法或者是我在服务器上调试器的设置上错过了什么吗?

我使用的是PostgreSQL 8.3和pgAdmin 1.14。


9
+1 很好的问题。虽然我不知道为什么它失败了。如果没有任何结果,您可以随时将您的问题发送到pgAdmin支持列表:pgadmin-support@postgresql.org(在此处包含一个链接到您的问题)。请参阅此处的列表存档 - Erwin Brandstetter
5
抱歉,我不能够打开链接并翻译其中的内容。请提供需要翻译的具体文本,我会尽力为您进行翻译。 - bilash.saha
你正在以超级用户身份运行吗?根据你所参考的网站,为了使其正常工作,需要使用超级用户身份。 - John P
是的,我是超级用户账户。即使我使用默认创建的 postgres 账户,仍然存在相同的问题。 - Ken Chan
pldbgapi.sql脚本可以在share\extension\pldbgapi--1.0.sql路径下找到。 - azhidkov
显示剩余10条评论
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数据库,this gist非常好地解释了如何下载启用调试所需的依赖项。 确保在安装时以root身份运行。

易错的部分是针对您要调试的实际数据库发出命令。 对于较新版本的PostgreSQL,您只需要执行以下操作:

CREATE EXTENSION IF NOT EXISTS pldbgapi;

如果没有返回错误,那么你就可以继续了。
还有一些需要注意的地方:
- 如上所述,只有在超级用户帐户下运行时才能进行调试。 - 从官方文档中可以看出,您只能调试pl/pgsql函数。因此,如果您的函数中写了LANGUAGE c之类的内容,PGAdmin甚至不会显示右键“调试”菜单选项。请查找带有LANGUAGE plpgsql的内容,然后调试菜单应该会显示。

2

Ken,

你试过使用pgAdmin 1.8来排除与PgAdmin 1.14/ PostgreSQL 8.3互动问题的可能性吗?我已经有一段时间没有使用8.3了,对于我写的那篇文章——你所提到的,我是在测试1.14/ PostgreSQL 9.1的时候写的,所以这很有可能是与旧版本的互动问题。不幸的是,我没有8.3可以测试。

我依稀记得曾经遇到过你遇到的问题,但那是当我在postgresql.conf中添加了另一个共享库(除pldebugger之外)。我记不清是哪个了,但删除其他共享库解决了我的问题。

希望这些建议能有所帮助, Regina


谢谢Regina。我尝试使用pgAdmin 1.14、1.12和1.8与PostgreSQL服务器8.13.16,问题仍然存在。但在我的办公室电脑上,我尝试使用pgAdmin 1.12与PostgreSQL服务器8.13.5,它运行得非常好。如果有时间,我将尝试使用最新版本的PostgreSQL 9.1。 - Ken Chan
我想知道是否有某种防病毒软件阻止了它。 - LR1234567
感谢Regina的建议。但是我已经禁用了防病毒软件(Avira AntiVir)和Windows防火墙,但它仍然无法正常工作。 - Ken Chan

1

我遇到了同样的问题。 确保您在postgres.conf中加载的唯一共享库是调试器。 不要加载其他任何东西,甚至不要加载分析器。 如果在尝试调试函数时出现SSL错误,请重新连接到服务器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接