我的_表有两个文本列:my_query,它包含各种文本形式的DML查询;my_explanation,它完全由空填充。
我想做些类似的事情:
UPDATE my_table SET my_explanation = execute explain analyze my_table.my_query
这样,每一行上的my_解释列都会更新,以包含my query列中包含的查询的explain analyze的文本输出。
我试着用游标做一个函数,但没用。我还在学习pgplsql。有什么想法吗?
最佳答案
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
)
关于postgresql - 如何将“解释分析”结果输出到表列?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45601462/