我从Postgres 8.1 docs看到EXPLAIN
生成了类似表格数据的内容:
在PostgreSQL 7.3之前,该计划以通知的形式发布 信息。现在它显示为查询结果(格式化为带有的表 单个文本栏)。
我正在使用9.0,为此,docs说,输出可以是各种类型,包括TEXT和XML。我真正想做的是将输出视为标准查询结果,以便为查询或一组查询生成简单的报告,例如,
SELECT maxcost FROM (
EXPLAIN VERBOSE
SELECT COUNT(*)
FROM Mytable
WHERE value>17);
上述内容无法以我尝试过的任何形式运行,并且我编写了属性maxcost
以证明提取特定数据位是多么简洁(在这种情况下,最大值)估计的查询成本)。我能做些什么会让我成为那里的一部分吗?我希望能够在简单的SQL控制台中工作。
答案 0 :(得分:1)
到目前为止还没有其他答案,所以这是我自己的努力。
可以在plpgsql中读取变量的结果,并且因为输出可以是XML,所以可以在存储的函数中包装EXPLAIN
以使用xpath产生顶级成本:
CREATE OR REPLACE FUNCTION estimate_cost(IN query text,
OUT startup numeric,
OUT totalcost numeric,
OUT planrows numeric,
OUT planwidth numeric)
AS
$BODY$
DECLARE
query_explain text;
explanation xml;
nsarray text[][];
BEGIN
nsarray := ARRAY[ARRAY['x', 'http://www.postgresql.org/2009/explain']];
query_explain :=e'EXPLAIN(FORMAT XML) ' || query;
EXECUTE query_explain INTO explanation;
startup := (xpath('/x:explain/x:Query/x:Plan/x:Startup-Cost/text()', explanation, nsarray))[1];
totalcost := (xpath('/x:explain/x:Query/x:Plan/x:Total-Cost/text()', explanation, nsarray))[1];
planrows := (xpath('/x:explain/x:Query/x:Plan/x:Plan-Rows/text()', explanation, nsarray))[1];
planwidth := (xpath('/x:explain/x:Query/x:Plan/x:Plan-Width/text()', explanation, nsarray))[1];
RETURN;
END;
$BODY$
LANGUAGE plpgsql;
因此问题的例子变成了:
SELECT totalcost
FROM estimate_cost('SELECT COUNT(*)
FROM Mytable
WHERE value>17');
答案 1 :(得分:1)
This message建议使用“FOR rec IN EXECUTE EXPLAIN ...”,这似乎可以解决问题,例如:
Add-AzureAccount
Select-AzureSubscription "YOUR-AZURE-SUB-NAME"
$agggregate = get-UsageAggregates -ReportedStartTime "5/2/2015" -ReportedEndTime "5/5/2015"