Postgresql输出EXPLAIN ANALYZE到文件

Tho*_*mas 4 postgresql file explain output

我需要知道特定查询将运行多长时间(我预计运行时间非常长).为此,我决定EXPLAIN ANALYZE在查询集上运行一个只包含整个数据集的一部分并从那里进行推断.但我有一个问题; 在连接超时之前,查询需要两个多小时,没有结果.我不想增加超时,因为我不知道可以运行多长时间(两小时到两天之间).

有没有办法可以指示SQL服务器将数据输出到服务器文件系统上的文件中,所以我不必担心超时?我尝试过以下方法:

Copy (
    EXPLAIN ANALYZE INSERT INTO <table>
    <Long complex query here>
) To '/tmp/analyze.csv' With CSV;
Run Code Online (Sandbox Code Playgroud)

但我得到一个错误EXPLAIN.

为了记录,是的,我想这样做ANALYZE是因为

  • 它减少了以后处理的数据量,并且
  • 它给出了实际的时间估计.

och*_*dru 15

您只需使用\oin psql将结果输出到文件:

# \o /tmp/output.txt
# explain analyze ...
# \o
Run Code Online (Sandbox Code Playgroud)

\o也可以输入命令:查看这篇博文,当然还有psql文档.

  • 您也可以JSON格式写入带有EXPLAIN(ANALYZE,FORMAT json)的文件 (2认同)

Abe*_*sto 8

非常简单的技巧:

create or replace function get_explain(in qry text, out r text) returns setof text as $$
begin
  for r in execute qry loop
    raise info '%', r;
    return next;
  end loop;
  return;
end; $$ language plpgsql;
Run Code Online (Sandbox Code Playgroud)

请注意,如果您不想真正修改数据,那么您应该将其包装到事务中:

begin;
copy (select get_explain('explain (analyze) select 1;')) to '/tmp/foo.foo';
select get_explain('explain (analyze, format xml) select 1;');
rollback;
Run Code Online (Sandbox Code Playgroud)

可能已经存在可以使用的类似功能,但我没有找到它。

PS:它将解决语法错误的问题,但我不确定它是否解决了超时问题,因为如文档中所述:

重要提示:请记住,当使用 ANALYZE 选项时,该语句实际上被执行。关联。