在PL/pgSQL中解释分析出现错误:查询没有结果数据&的目标出现错误、目标、结果、数据

2023-09-04 01:43:49 作者:记忆变得沉重

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

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

是plsql的问题吗 ,有张表就是打不开,问题如图,求大神解答

有问题的表名为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

如果我取消注释已注释的部分,并注释掉EXPLAIN ANALYE,则该函数工作正常。

推荐答案

或者您可以将此更简单的形式与RETURN QUERY一起使用:

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;

呼叫:

SELECT * FROM f_explain_analyze(1);

适用于我的Postgres 9.3。