我正在使用存储过程来获取 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
A top-level
SELECT
需要替换为 PERFORM
,以表明您打算放弃整体结果。子查询或表表达式则不然。
尝试将
PERFORM n+1
改回 SELECT n+1
。