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 
)