调试存储过程(pldebugger)

RDS PostgreSQL提供pldebugger插件,用于调试存储过程。

您可以加入RDS PostgreSQL插件交流钉钉群(103525002795),进行咨询、交流和反馈,获取更多关于插件的信息。

背景信息

RDS PostgreSQL支持多种存储过程语言,例如plpgsql、plpython、plperl、pltcl等等。用户可以使用这些存储过程语言,创建对应的函数或存储过程。

前提条件

  • RDS PostgreSQL实例版本需要满足以下条件:

    实例大版本

    内核小版本

    PostgreSQL 14、15、16、17

    20250630及以上

    PostgreSQL 10、11、12、13

    20230830及以上

    重要

    20230830内核小版本之前已支持此插件,但为了规范插件管理,提升RDS PostgreSQL在插件侧的安全防护,RDS计划在内核版本迭代中陆续对部分存在安全风险的插件进行优化,部分插件在低内核小版本无法创建,更多信息,请参见限制创建插件说明

    • 如果您的实例内核小版本低于20230830,且已经使用了此插件,则不影响使用。

    • 如果您首次创建或重新创建此插件,请升级内核小版本到最新。

  • 已创建RDS PostgreSQL高权限账号,如何创建高权限账号请参见创建账号

  • 客户端pgAdmin4请确保使用版本大于pgAdmin 4 v4.19(包含pgAdmin 4 v4.19)。pgAdmin4下载链接请参见pgAdmin 4

安装和卸载插件

  1. 设置实例参数,在shared_preload_libraries运行参数值中添加plugin_debugger。例如,将运行参数值改为'pg_stat_statements,auto_explain,plugin_debugger'

  2. 使用高权限账号连接需要安装插件的数据库,执行以下SQL管理插件。

    • 创建插件

      CREATE EXTENSION pldbgapi;
    • 删除插件

      DROP EXTENSION pldbgapi;

调试示例

  1. 使用pgAdmin客户端连接RDS PostgreSQL数据库。连接方法,请参见连接PostgreSQL实例

  2. 创建测试数据库和存储过程。

    示例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;
  3. 右键选择待调试的函数。选择Debug

  4. pgAdmin界面右边的函数调试框中,您可以对目标函数进行单步调试,包含step into/over,continue,加设断点,停止等操作。底部有调试过程中显示的局部变量信息,调试结果与函数堆栈。调试按钮