我的_表有两个文本列: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/

10-12 15:56