通过运行一次语句同时从 Postgresql 获取结果和解释分析输出
Posted
技术标签:
【中文标题】通过运行一次语句同时从 Postgresql 获取结果和解释分析输出【英文标题】:Getting results and explain analyze output at the same time from Postgresql by running the statement once 【发布时间】:2019-06-13 12:15:23 【问题描述】:有什么方法可以执行一次语句并获得结果以及解释分析输出?例如我不想运行SQL,得到结果,然后将EXPLAIN ANALYZE
添加到语句的开头并再次运行以进行解释计划。如果 psycopg2 包中有东西,那就太好了。
一种方法 - 激活 auto_explain 并解析日志。但也许有更好的主意
【问题讨论】:
【参考方案1】:如果您有超级用户访问权限,您可以使用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)
【讨论】:
感谢您的回答。但是,当我尝试使用 python psycopg2 packagecursor.fetchall()
执行此操作时,只返回 1259 的结果,而不是日志
阅读 this answer 了解如何获取 NOTICE 消息。以上是关于通过运行一次语句同时从 Postgresql 获取结果和解释分析输出的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 ODBC 在 Access 中获取详细的 PostgreSQL 错误?