首页 文章

使用pgAdmin调试PostgreSQL函数

提问于
浏览
64

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

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

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

enter image description here

选择"Debugging" - > Debug时,会弹出一个窗口,允许我输入输入参数的值 . 但在那之后,当我按 OK 时,它根本没有响应 .

enter image description here

任何想法或我错过了服务器上的调试器设置?

我正在使用PostgreSQL 8.3和pgAdmin 1.14

3 回答

  • 5

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

    假设您在Linux服务器上运行PostgreSQL数据库this gist在解释如何下载启用调试的依赖项方面做得非常出色 . 确保在安装时以root身份运行 .

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

    CREATE EXTENSION IF NOT EXISTS pldbgapi;
    

    如果这不会返回错误,那么你应该很高兴 .

    一些额外的注意事项:

    • 如上所述,您只能在作为超级用户帐户运行时进行调试

    • their docs您只能调试pl / pgsql函数 . 因此,如果您的函数显示类似 LANGUAGE c PGAdmin,则在您选择该函数时甚至不会显示右键单击Debug菜单选项 . 查找具有 LANGUAGE plpgsql 且调试菜单应显示的内容 .

  • 1

    肯,

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

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

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

  • 2

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

相关问题