PL/pgSQL 中的 EXPLAIN ANALYZE 给出错误:“查询没有结果数据的目的地”

2024-05-04

我试图理解 PL/pgSQL 函数中 select 语句的查询计划,但我不断收到错误。我的问题:如何获取查询计划?

以下是重现该问题的简单案例。

相关表名为 test_table。

CREATE TABLE test_table
(
  name character varying,
  id integer
);

函数如下:

DROP FUNCTION IF EXISTS test_function_1(INTEGER);
CREATE OR REPLACE FUNCTION test_function_1(inId INTEGER) 
RETURNS TABLE(outName varchar)
AS 
$$
BEGIN
  -- is there a way to get the explain analyze output?
  explain analyze select t.name from test_table t where t.id = inId;

  -- return query select t.name from test_table t where t.id = inId;
END;
$$ LANGUAGE plpgsql;

当我跑步时

select * from test_function_1(10);

我收到错误:

ERROR:  query has no destination for result data
CONTEXT:  PL/pgSQL function test_function_1(integer) line 3 at SQL statement

如果我取消注释部分并注释掉解释分析,该函数可以正常工作。


或者您可以使用这个更简单的形式RETURN QUERY http://www.postgresql.org/docs/current/static/plpgsql-control-structures.html#PLPGSQL-STATEMENTS-RETURNING:

CREATE OR REPLACE FUNCTION f_explain_analyze(int)
  RETURNS SETOF text AS
$func$
BEGIN
   RETURN QUERY
   EXPLAIN ANALYZE SELECT * FROM foo WHERE v = $1;
END
$func$ LANGUAGE plpgsql;

Call:

SELECT * FROM f_explain_analyze(1);

在 Postgres 9.3 中为我工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PL/pgSQL 中的 EXPLAIN ANALYZE 给出错误:“查询没有结果数据的目的地” 的相关文章

随机推荐