1

我有my_table有兩個文本列:my_query,其中包含各種文本形式的DML查詢;並且my_explanation,其完全填充了的空值如何輸出「explain analyze」結果到表格列?

我想這樣做:

UPDATE my_table SET my_explanation = execute explain analyze my_table.my_query 

使各行上my_explanation列被更新爲包含的文本輸出講解分析查詢的包含在其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 
)