通过运行一次语句,同时从 Postgresql 获取结果并解释分析输出



有没有办法执行一次语句并获得结果以及解释分析输出?例如,我不想运行 SQL,获取结果,然后将EXPLAIN ANALYZE添加到语句的开头并再次运行它以进行解释计划。如果 psycopg2 包中有一些东西,那就太好了。

一种方法 - 激活auto_explain并解析日志。但也许有一个更好的主意

如果您具有超级用户访问权限,则可以使用 auto_explain 在客户端会话中获取结果:

test=# LOAD 'auto_explain';
LOAD
test=# SET log_min_messages = PANIC;  -- don't log it
SET
test=# SET auto_explain.log_min_duration = 0;
SET
test=# SET auto_explain.log_analyze = on;
SET
test=# SET auto_explain.log_buffers = on;
SET
test=# SET client_min_messages = LOG;
SET
test=# SET SESSION AUTHORIZATION laurenz;
SET
test=> SELECT oid FROM pg_class WHERE relname = 'pg_class';
LOG:  duration: 0.040 ms  plan:
Query Text: SELECT oid FROM pg_class WHERE relname = 'pg_class';
Index Scan using pg_class_relname_nsp_index on pg_class  (cost=0.28..8.29 rows=1 width=4) (actual time=0.019..0.021 rows=1 loops=1)
  Index Cond: (relname = 'pg_class'::name)
  Buffers: shared hit=3
 oid  
------
 1259
(1 row)

最新更新