我正在尝试为我的查询获取查询计划。但是,我无法直接访问数据库,只能运行
SELECT
语句。
有没有办法将
SELECT
包裹在 EXPLAIN
周围,甚至可以将其编码为字符串以生成要在我这边提取的表格数据。
注意:我无法使用 psql(默认命令行终端)。
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
,...)请参阅: