RDS PostgreSQL提供pldebugger插件,用于调试存储过程。
背景信息
RDS PostgreSQL支持多种存储过程语言,例如plpgsql、plpython、plperl、pltcl等等。用户可以使用这些存储过程语言,创建对应的函数或存储过程。
前提条件
RDS PostgreSQL实例版本需要满足以下条件:
实例大版本:10、11、12或13。
实例内核小版本为20230830或以上。
重要20230830内核小版本之前已支持此插件,但为了规范插件管理,提升RDS PostgreSQL在插件侧的安全防护,RDS计划在内核版本迭代中陆续对部分存在安全风险的插件进行优化,部分插件在低内核小版本无法创建,更多信息,请参见【产品/功能变更】RDS PostgreSQL限制创建插件说明。
如果您在20230830内核小版前已经使用了此插件,则不影响使用。
如果您首次创建或重新创建此插件,请升级内核小版本到最新。
使用该插件前,需要将plugin_debugger加入到shared_preload_libraries参数中。
您可以使用RDS PostgreSQL参数设置功能,为shared_preload_libraries参数添加plugin_debugger。具体操作,请参见设置实例参数。
客户端pgAdmin4请确保使用版本大于pgAdmin 4 v4.19(包含pgAdmin 4 v4.19)。pgAdmin4下载链接请参见pgAdmin 4。
使用方法
创建插件
CREATE EXTENSION pldbgapi;
说明仅高权限账号可以执行此命令。
删除插件
DROP EXTENSION pldbgapi;
说明仅高权限账号可以执行此命令。
调试示例
使用pgAdmin客户端连接RDS PostgreSQL数据库。连接方法,请参见连接PostgreSQL实例。
创建测试数据库和存储过程。
示例SQL如下:
CREATE TABLE test( id int, name VARCHAR(50)); CREATE OR REPLACE FUNCTION public.testcount() RETURNS integer AS $$ DECLARE postgres text; counts integer; BEGIN INSERT INTO test VALUES(1, 'a'); postgres:='SELECT COUNT(*) FROM test'; EXECUTE postgres INTO counts; IF counts > 100 THEN RETURN counts; ELSE RETURN 0; END IF; END; $$ language plpgsql;
右键选择待调试的函数。
在pgAdmin界面右边的函数调试框中,您可以对目标函数进行单步调试,包含step into/over,continue,加设断点,停止等操作。底部有调试过程中显示的局部变量信息,调试结果与函数堆栈。