递归查询上“执行”或接近“执行”时出现语法错误

问题描述 投票:0回答:1

我正在使用存储过程来获取 PgAdmin 中的总查询执行时间。

根据一些阅读,我尝试了以下方法:

DO $proc$

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

    WITH RECURSIVE t(n) AS (
        VALUES (1)
      UNION ALL
        PERFORM 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.

相反,我得到了这个:

错误:“PERFORM”第 13 行或附近出现语法错误:PERFORM n+1 FROM t WHERE n < 3
^ SQL 状态:42601 字符:189

sql postgresql stored-procedures recursive-query postgresql-9.4
1个回答
0
投票
PL/pgSQL 函数中的

A top-level

SELECT
需要替换为
PERFORM
,以表明您打算放弃整体结果。子查询或表表达式则不然。

尝试将

PERFORM n+1
改回
SELECT n+1

© www.soinside.com 2019 - 2024. All rights reserved.