若您需对已有Function(函数)进行开发或调试,可以安装pldbgapi插件并使用PL/pgSQL的调试功能,根据需求设置条件、程序断点、变量值等轻松实现。

功能介绍

AnalyticDB PostgreSQL版中,PL/pgSQL是一种用于编写存储过程和用户自定义函数(UDF)的扩展语言,它结合了SQL的数据查询和数据处理能力,补充了过程控制和编程特性,允许用户使用变量、条件、循环、异常处理等来实现复杂的逻辑和操作。

pldbgapi插件结合PL/pgSQL功能可用于调试,即类似使用GDB(GNU Debugger)调试C语言程序,可以设置程序断点,进行单步调试,显示变量运行值等。使用pldbgapi插件的PL/pgSQL功能可以使Function的开发、调试变得简便。

注意事项

  • AnalyticDB PostgreSQL 6.0版且小版本为v6.3.10.19及以上的实例支持pldbgapi插件。如何查看实例内核版本,请参见查看内核小版本

  • PL/pgSQL调试需在pgAdmin客户端中进行,建议使用v6.21版本的客户端,高版本不兼容AnalyticDB PostgreSQL版内核。pgAdmin客户端下载,请参见pgAdmin

操作步骤

  1. 安装pldbgapi插件:请您在云原生数据仓库 AnalyticDB PostgreSQL 版实例插件管理中安装pldbgapi插件。具体操作,请参见安装、升级与卸载插件

  2. 登录AnalyticDB PostgreSQL版数据库,创建用于PL/pgSQL调试的Function。本文Function示例如下。

    CREATE OR REPLACE FUNCTION add_numbers(a int, b int)
    RETURNS NUMERIC AS $$
    DECLARE
        t1_b_avg NUMERIC;
    BEGIN
        --DROP TABLE t1;
        CREATE TABLE t1 (a int, b int, c int, d int);
    	RAISE NOTICE 'Finish CREATE ';
        FOR i IN 1..10 LOOP
    	    INSERT INTO t1 VALUES (i, i, i, i);
    	END LOOP;
    	RAISE NOTICE 'Finish INSERT ';
        SELECT avg(t1.b) INTO t1_b_avg FROM t1 LIMIT 1;
    	RAISE NOTICE 'Finish SELECT: avg=[%] ', t1_b_avg;
    	DROP TABLE t1;
        RETURN a + b + t1_b_avg;
    END;
    $$ LANGUAGE plpgsql;
  3. 查询表数据,验证Function可用。

    SELECT add_numbers(1, 3);
  4. 打开pgAdmin,单击Object > Register > Server

  5. Register-Server页面的General页签,设置Server名称,如test

  6. Register-Server页面的Connection页签,填写如下参数,并单击Save完成Server创建。

    参数

    描述

    Host name/address

    AnalyticDB PostgreSQL版实例的外网地址。详细信息,请参见管理外网地址

    Port

    AnalyticDB PostgreSQL版实例的端口号。

    Maintenace database

    固定为postgres

    Username

    AnalyticDB PostgreSQL版实例的账号。

    Password

    账号密码。

  7. 在左侧Servers列表中,在目标Servers中单击test > Databases > postgres > Schemas > public > Functions定位到待调试的Function。

  8. 右键单击待调试的Function,并选择Debugging > Debug11.png

  9. Debugger页面,设置函数输入参数,并单击Debug。本文示例设置Name为a和b的值为2,且a不为空。12.png

  10. 在调试区域,单击左上角调试按钮ts.pngtstu.png

  11. 调试结束后,可在调试区域下方的MessagesResult页签查看调试结果。

    Messages页签:显示Function运行过程中的文本输出。

    Result页签:显示Function执行完成后的返回值。