是否可以通过SELECT语句提取“EXPLAIN查询”是PostgreSQL(不是psql命令执行)?

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

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

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

注意:我不能使用“psql”

提前致谢

postgresql
1个回答
0
投票

基本

EXPLAIN
返回一组文本值。
您可以在 PL/pgSQL 中动态
EXECUTE
给定的查询字符串,并将结果返回为
SETOF text
。您甚至可以传递任何
EXPLAIN
选项:

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注入是开放的。小心轻放!

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