我正在尝试为我的查询获取查询计划,但是我无法直接访问数据库,只能在我这边运行 SELECT 语句。
有没有办法将 SELECT 包裹在“EXPLAIN”周围,甚至可以将其编码为字符串以生成要在我这边提取的表格数据。
注意:我不能使用“psql”
提前致谢
基本
EXPLAIN
返回一组文本值。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注入是开放的。小心轻放!