调试存储过程(pldebugger)

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

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

背景信息

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;
    说明

    仅高权限账号可以执行此命令。

调试示例

  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,加设断点,停止等操作。底部有调试过程中显示的局部变量信息,调试结果与函数堆栈。调试按钮