2

XML Explain Plan(またはその他の形式)を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);

Explainは他のステートメントでは使用できないようですselect。次のステートメントも機能しません。

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

PostreSQL9.1.6を使用しています

4

2 に答える 2

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挿入のクエリを追加したいと思います。

于 2013-02-07T09:29:48.510 に答える
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;
$$;
于 2013-02-07T09:23:49.683 に答える