1

私はmy_tableと2つのテキスト列:my_queryを持っています。これにはテキスト形式のさまざまなDMLクエリが含まれています。 my_explanationは、ヌルで完全に埋められています。各行のmy_explanation列がそのに含まれるクエリのを分析説明のテキスト出力を含むように更新されるように"explain analyze"の結果を表の列に出力するにはどうすればいいですか?

UPDATE my_table SET my_explanation = execute explain analyze my_table.my_query 

:私のような何かをしたいと思います

my_query列。

カーソルで機能させようとしましたが、機能しませんでした。私はまだpgplsqlを学んでいます。何か案は?

答えて

1

EXECUTEは、PL/pgSQL文です。 SQLクエリで使用することはできません。LANGUAGE plpgsql関数またはDO blockでのみ使用できます。

おそらく、このような機能が欲しい:

CREATE FUNCTION explain_query(sql TEXT) RETURNS SETOF TEXT AS $$ 
BEGIN 
    RETURN QUERY EXECUTE 'EXPLAIN ANALYZE ' || sql; 
END 
$$ 
LANGUAGE plpgsql; 

EXPLAINは、複数の行を返すので、あなたがmy_tableに単一のレコードにそれに合わせて出力を集約する必要があります:

UPDATE my_table 
SET my_explanation = (
    SELECT string_agg(plan, E'\n') 
    FROM explain_query(my_query) plan 
) 
関連する問題