如何使用 SELECT 语句获取 EXPLAIN 输出?

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

我正在尝试为我的查询获取查询计划。但是,我无法直接访问数据库,只能运行

SELECT
语句。

有没有办法将

SELECT
包裹在
EXPLAIN
周围,甚至可以将其编码为字符串以生成要在我这边提取的表格数据。

注意:我无法使用 psql(默认命令行终端)。

sql postgresql plpgsql sql-execution-plan
1个回答
0
投票

Basic

EXPLAIN
返回一组文本值。但您无法使用普通的
SELECT
来访问它。您可以在 PL/pgSQL 中动态使用给定的查询字符串
EXECUTE
EXPLAIN
并将结果返回为
SETOF text
。您甚至可以传递
EXPLAIN
选项。
创建该函数一次。然后你就可以通过
EXPLAIN
“打电话”
SELECT
:

CREATE FUNCTION f_explain(_qry text, _options text = NULL)
  RETURNS SETOF text
  LANGUAGE plpgsql AS
$func$
BEGIN
  RETURN QUERY EXECUTE
  format('EXPLAIN %s %s', _options, _qry);
END
$func$;

调用示例:

SELECT * FROM f_explain('SELECT 1');
SELECT * FROM f_explain('SELECT 1', '(ANALYZE, BUFFERS)');

选项(如果给出)必须采用合法的语法形式。

小提琴

小心! 使用选项

ANALYZE
,实际执行给定的查询字符串。所以这对SQL注入是开放的。小心轻放!

相关:

或者,您可以获得

EXPLAIN
输出消息字符串(
NOTICE
WARNING
,...)请参阅:

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