到目前爲止沒有其他答案,所以這裏是我自己的刺傷。
這是可能的讀入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');
來自文檔的引用顯示問題:「格式化爲像表*一樣的文本列*」。 –
@johnFlatness:你能詳細說明還是提供答案?爲什麼單列表是一個問題? '選擇*從解釋......'在這種情況下仍然可以工作,不是嗎?我的投影屬性只是一個願望,而不是要求。 – beldaz