Я использую 2 источника информации о производительности моих запросов: pg_stat_statements
таблица и файл журнала с выводом с расширением auto_explain
. Таблица pg_stat_statements
имеет столбец queryid
(некоторые га sh), который выглядит следующим образом:
postgres=# select queryid from pg_stat_statements;
queryid
----------------------
1809546128015582813
3296564334073921976
-2249120274633451873
-4210932522978766496
-7924989344813642498
-5969017373161620754
-3085278641555168774
-4062271456003967982
5649680170374315937
...
И журнал содержит выходные данные из расширения auto_explain
, которое выглядит следующим образом:
...
2020-02-21 13:57:17.132 UTC [postgres postgres 127.0.0.1(59706)] LOG: duration: 0.744 ms plan:
Query Text: DECLARE temp1 NO SCROLL CURSOR FOR select * from city
Seq Scan on public.city (cost=0.00..72.79 rows=4079 width=31) (actual time=0.016..0.475 rows=4079 loops=1)
Output: id, name, countrycode, district, population
2020-02-21 13:57:17.355 UTC [postgres postgres 127.0.0.1(59706)] LOG: duration: 2.447 ms plan:
Query Text: select * from city
Seq Scan on public.city (cost=0.00..72.79 rows=4079 width=31) (actual time=0.008..0.380 rows=4079 loops=1)
Output: id, name, countrycode, district, population
...
Теперь я хочу сопоставить запросы из pg_stat_statements
с запросами в журнале. Очевидно, что критерии могут быть queryid
- уникальным идентификатором (га sh) запроса, но в этом подходе есть 3 проблемы:
- Запросы в
pg_stat_statements
могут выглядеть как select * from city where name = $1
и в журнале, как select * from city where name = 'Béjaïa'
- В журнале нет никаких данных
queryid
. - Нет никаких гарантий относительно пробелов, регистра и аналогичных форм ...
Можно ли как-то сопоставить их? Может быть, Postgres имеет такую функцию, как pg_get_queryid_from_query_sql(the_sql)
? Возможно ли это вообще?