2013-02-07 68 views
2

如何在PostgreSQL數據庫中存儲XML解釋計劃(或任何其他格式)?將XML解釋計劃存儲在PostgreSQL數據庫中

測試數據:explain (verbose, format xml) select 1

表來存儲結果:create table tmp.explain_plan_data (expp xml);

我天真的測試失敗:

insert into tmp.explain_plan_data values (explain (verbose, format xml) select 1); 

似乎解釋不能在任何其他select語句中使用,下面的語句也不起作用:

select * from (explain (verbose, format xml) select 1) a 

我們正在使用PostreSQL 9.1.6

回答

3

這是不可能捕獲使用子查詢EXPLAIN輸出,你應該去一個PL/pgSQL的過程:

CREATE OR REPLACE FUNCTION explain_v_xml(in_sql text) 
RETURNS TABLE(explain_line xml) AS $explain_v_xml$ 
BEGIN 
    RETURN QUERY EXECUTE 'EXPLAIN (VERBOSE, FORMAT xml) '||in_sql; 
END; 
$explain_v_xml$ LANGUAGE plpgsql; 

現在你可以查詢它是這樣的:

SELECT explain_line FROM explain_v_xml('SELECT * FROM pg_locks'); 

並插入到目標表:

INSERT INTO tmp.explain_plan_data SELECT explain_v_xml('SELECT 1'); 
SELECT * FROM tmp.explain_plan_data; 

也許在表中單獨解釋輸出不太方便,我寧願增加原始查詢的 和插入的timestamptz

3

我不是100%確定,但我認爲這隻能使用存儲過程。您可以使用DO語句:

DO 
$$ 
DECLARE 
    _result xml; 
BEGIN 
    EXECUTE 'explain (verbose, format xml) select 1' INTO _result; 

    INSERT INTO tmp.explain_plan_data(expp) VALUES(_result); 
END; 
$$;