Получите результаты и объясните анализ выходных данных одновременно с Postgresql, запустив оператор один раз - PullRequest
0 голосов
/ 13 июня 2019

Есть ли способ выполнить инструкцию один раз и получить результаты, а также объяснить результаты анализа? Я не хочу, например, запускать SQL, получать результаты, а затем добавить EXPLAIN ANALYZE в начало оператора и запустить его снова для плана объяснения. Если в пакете psycopg2 есть что-то, это было бы здорово.

Один из способов - активировать auto_explain и анализировать логи. Но, может быть, есть лучшая идея

1 Ответ

1 голос
/ 13 июня 2019

Если у вас есть права суперпользователя, вы можете использовать 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)
...