You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PgAdmin中递归查询出现PERFORM语法错误,求存储过程排障

解决PostgreSQL递归CTE中的PERFORM语法错误问题

错误原因

递归CTE(WITH RECURSIVE)的每个分支必须是返回结果集的SELECT语句,而PERFORM是PL/pgSQL专属的执行语句,仅用于执行不需要返回结果的操作,不能出现在CTE的定义逻辑里。你在递归分支里写的PERFORM n+1 FROM t WHERE n < 3违反了这个规则,导致语法报错。

修正后的代码

把递归分支的PERFORM替换成SELECT,保留外层的PERFORM来执行统计查询(避免返回结果),修改后的完整代码如下:

DO $proc$

DECLARE
  StartTime timestamptz;
  EndTime timestamptz;
  Delta double precision;
BEGIN
  StartTime := clock_timestamp();

    WITH RECURSIVE t(n) AS (
        VALUES (1)
      UNION ALL
        SELECT n+1 FROM t WHERE n < 3
    )
    PERFORM sum(n) FROM t;

  EndTime := clock_timestamp();
  Delta := 1000 * ( extract(epoch from EndTime) - extract(epoch from StartTime) );
  RAISE NOTICE 'Duration in millisecs=%', Delta;
END;
$proc$;

运行效果说明

修正后执行代码,会正常输出类似如下的结果:

NOTICE:  Duration in millisecs=0.106
DO
Query returned successfully in 6 secs 898 msec.

内容的提问来源于stack exchange,提问作者Addisu Foryou1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 19:52:25