如何调试PostgreSQL存储过程?

48

我意识到没有与SQL Server Management Studio相似的东西,所以我已经做好了使用老式的printf调试的心理准备。

唯一的问题是如何从存储过程中进行“printf”?


2
raise notice(http://www.postgresql.org/docs/current/static/plpgsql-errors-and-messages.html)是其相应的中文表达。但是,pgAdmin有一个PL/pgSQL调试器:http://www.pgadmin.org/docs/1.18/debugger.html - user330315
1
有趣的是,我正在使用pgAdmin,但没有注意到它有一个调试器。我会去查看一下。谢谢。 - mark
我想知道这个问题怎么会有近6年的历史,当时PostgreSQL 11引入了“true”存储过程。 - Lukasz Szozda
可能是他使用了“存储过程”作为一个更通用的术语,涵盖了函数(尽管它们是不同的)。 - undefined
5个回答

51

17

看起来您正在寻找实际的调试功能。PostgreSQL实际上从 PostgreSQL 8.3 开始引入了这个功能。

Debugger

这是非常棒的功能,完全符合PostgreSQL的口号"世界上最先进的开源数据库"。 它有点麻烦,但这些链接可能会帮助您入门。启用后,它允许您通过PGAdmin中方便的右键菜单设置断点或定义输入并评估函数。 Right click menu


你知道是否有可能评估或找出未声明的变量值吗?比如从一个select into... - Diogo Alves

7

Postgres Plus Advanced Server看起来非常酷,但对我来说不在范围内,因为它需要购买许可证,而对于个人来说这个许可证价格相当高。 - mark

3

PGAdmin有一个调试器:我在Ubuntu环境下使用Postgres 12试过了,它对我有效:

  1. 安装这个包

    apt-get install postgresql-12-pldebugger

  2. 在存储过程所在的数据库中运行此命令

    CREATE EXTENSION pldbgapi;

  3. 在您的PostgreSQL安装文件夹中,确切地说是在数据文件夹中,更改postgresql.conf文件中的此参数

    shared_preload_libraries = 'plugin_debugger'

注意:更改后需要重新启动Postgres

  1. 在pgAdmin中右键单击模式架构中程序列表中存在的程序,设置参数值并选择调试

1

我知道这个答案有点晚,但是很多年前我也遇到了完全相同的问题。我需要编写几个非常复杂的存储过程。 我找了很多程序,只有一个具备完美且用户友好的功能。 我正在使用"SQL Manager for PostgreSQL" https://www.sqlmanager.net/products/postgresql/manager

我可以通过逐步调试、断点和可编辑的输入变量来完全调试我的函数。直到现在,我还没有找到其他产品可以做到这一点。它的价格有点高(但它能够快速回报你所节省的时间...),但如果你需要编写复杂的函数,它会成为你的好帮手;-) enter image description here


在IntelliJ中,你还可以使用一个很棒的调试器插件:https://plugins.jetbrains.com/plugin/18419-postgresql-debugger - undefined

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