Skip to content

Commit 7dab91e

Browse files
committedMay 3, 2023
Properly handle pg_stat_statements.toplevel
This is a new field added in pg_stat_statements 1.9. Now that this field is also handled by powa-archivist in (currently unreleased) version 4.2.0 modify the appropriate queries to return correct results when some queries are run at both toplevel and !toplevel. Per report from Marc Cousin.
1 parent 8dec025 commit 7dab91e

File tree

1 file changed

+12
-10
lines changed

1 file changed

+12
-10
lines changed
 

‎powa/sql/views.py

+12-10
Original file line numberDiff line numberDiff line change
@@ -71,11 +71,11 @@ def powa_base_statdata_detailed_db():
7171
-- of the search interval, and has to be inside the coalesce_range. We
7272
-- still need to unnest this one as we may have to remove some of the
7373
-- underlying records
74-
SELECT unnested.dbid, unnested.userid, unnested.queryid,
74+
SELECT unnested.dbid, unnested.toplevel, unnested.userid, unnested.queryid,
7575
(unnested.records).*
7676
FROM (
77-
SELECT psh.dbid, psh.userid, psh.queryid, psh.coalesce_range,
78-
unnest(records) AS records
77+
SELECT psh.dbid, psh.toplevel, psh.userid, psh.queryid,
78+
psh.coalesce_range, unnest(records) AS records
7979
FROM powa_statements_history psh
8080
WHERE coalesce_range && tstzrange(:from, :from, '[]')
8181
AND psh.dbid = powa_databases.oid
@@ -95,11 +95,11 @@ def powa_base_statdata_detailed_db():
9595
-- of the search interval, and has to be inside the coalesce_range. We
9696
-- still need to unnest this one as we may have to remove some of the
9797
-- underlying records
98-
SELECT unnested.dbid, unnested.userid, unnested.queryid,
98+
SELECT unnested.dbid, unnested.toplevel, unnested.userid, unnested.queryid,
9999
(unnested.records).*
100100
FROM (
101-
SELECT psh.dbid, psh.userid, psh.queryid, psh.coalesce_range,
102-
unnest(records) AS records
101+
SELECT psh.dbid, psh.toplevel, psh.userid, psh.queryid,
102+
psh.coalesce_range, unnest(records) AS records
103103
FROM powa_statements_history psh
104104
WHERE coalesce_range && tstzrange(:to, :to, '[]')
105105
AND psh.dbid = powa_databases.oid
@@ -119,10 +119,11 @@ def powa_base_statdata_detailed_db():
119119
-- so we don't need to unnest them. We just retrieve the mins_in_range,
120120
-- maxs_in_range from the record, build an array of this and return it as
121121
-- if it was the full record
122-
SELECT unnested.dbid, unnested.userid, unnested.queryid,
122+
SELECT unnested.dbid, unnested.toplevel, unnested.userid, unnested.queryid,
123123
(unnested.records).*
124124
FROM (
125-
SELECT psh.dbid, psh.userid, psh.queryid, psh.coalesce_range,
125+
SELECT psh.dbid, psh.toplevel, psh.userid, psh.queryid,
126+
psh.coalesce_range,
126127
unnest(ARRAY[mins_in_range,maxs_in_range]) AS records
127128
FROM powa_statements_history psh
128129
WHERE coalesce_range && tstzrange(:from, :to, '[]')
@@ -140,7 +141,7 @@ def powa_base_statdata_detailed_db():
140141
UNION ALL
141142
142143
-- The "current" records are simply returned after filtering
143-
SELECT psc.dbid, psc.userid, psc.queryid,(psc.record).*
144+
SELECT psc.dbid, psc.toplevel, psc.userid, psc.queryid,(psc.record).*
144145
FROM powa_statements_history_current psc
145146
WHERE (record).ts <@ tstzrange(:from,:to,'[]')
146147
AND psc.dbid = powa_databases.oid
@@ -311,13 +312,14 @@ def powa_getstatdata_detailed_db(srvid):
311312
column("srvid"),
312313
column("queryid"),
313314
column("dbid"),
315+
column("toplevel"),
314316
column("userid"),
315317
column("datname"),
316318
] + diffs)
317319
.select_from(base_query)
318320
.where(column("srvid") == srvid)
319321
.group_by(column("srvid"), column("queryid"), column("dbid"),
320-
column("userid"), column("datname"))
322+
column("toplevel"), column("userid"), column("datname"))
321323
.having(max(column("calls")) - min(column("calls")) > 0))
322324

323325

0 commit comments

Comments
 (0)