From de9384cb7fb018098ef40b5f2cdab20ef705d8a9 Mon Sep 17 00:00:00 2001 From: Ilya Staroverov Date: Mon, 26 Oct 2026 12:52:01 +0300 Subject: [PATCH v1 04/11] Include the kind of grouping sets in query jumbling GroupingSet.kind, which tells ROLLUP, CUBE and GROUPING SETS apart, has not been part of the query ID since grouping sets were added in 9.5. So queries like GROUP BY ROLLUP (a, b), GROUP BY CUBE (a, b) and GROUP BY GROUPING SETS (a, b), which compute different groups, were merged into a single pg_stat_statements entry. Include GroupingSet.kind in query jumbling. This changes the query IDs of the queries using grouping sets, so it is for master only. Author: Ilya Staroverov --- contrib/pg_stat_statements/expected/select.out | 15 ++++++++++----- src/include/nodes/parsenodes.h | 2 +- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/contrib/pg_stat_statements/expected/select.out b/contrib/pg_stat_statements/expected/select.out index 5961c894e9..bdc740d1c5 100644 --- a/contrib/pg_stat_statements/expected/select.out +++ b/contrib/pg_stat_statements/expected/select.out @@ -953,13 +953,18 @@ SELECT a, b, COUNT(*) FROM pgss_empty_tab GROUP BY GROUPING SETS (CUBE (a), ROLL SELECT calls, query FROM pg_stat_statements ORDER BY query COLLATE "C"; calls | query -------+----------------------------------------------------------------------------------------- - 2 | SELECT a, b, COUNT(*) FROM pgss_empty_tab GROUP BY GROUPING SETS (ROLLUP (a), CUBE (b)) - 2 | SELECT a, b, COUNT(*) FROM pgss_empty_tab GROUP BY ROLLUP ((a, b)) - 3 | SELECT a, b, COUNT(*) FROM pgss_empty_tab GROUP BY ROLLUP (a, b) - 2 | SELECT a, b, COUNT(*) FROM pgss_empty_tab GROUP BY a, ROLLUP (b) + 1 | SELECT a, b, COUNT(*) FROM pgss_empty_tab GROUP BY CUBE ((a, b)) + 1 | SELECT a, b, COUNT(*) FROM pgss_empty_tab GROUP BY CUBE (a, b) + 1 | SELECT a, b, COUNT(*) FROM pgss_empty_tab GROUP BY GROUPING SETS (CUBE (a), ROLLUP (b)) + 1 | SELECT a, b, COUNT(*) FROM pgss_empty_tab GROUP BY GROUPING SETS (ROLLUP (a), CUBE (b)) + 1 | SELECT a, b, COUNT(*) FROM pgss_empty_tab GROUP BY GROUPING SETS (a, b) + 1 | SELECT a, b, COUNT(*) FROM pgss_empty_tab GROUP BY ROLLUP ((a, b)) + 1 | SELECT a, b, COUNT(*) FROM pgss_empty_tab GROUP BY ROLLUP (a, b) + 1 | SELECT a, b, COUNT(*) FROM pgss_empty_tab GROUP BY a, CUBE (b) + 1 | SELECT a, b, COUNT(*) FROM pgss_empty_tab GROUP BY a, ROLLUP (b) 0 | SELECT calls, query FROM pg_stat_statements ORDER BY query COLLATE "C" 1 | SELECT pg_stat_statements_reset() IS NOT NULL AS t -(6 rows) +(11 rows) SELECT pg_stat_statements_reset() IS NOT NULL AS t; t diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h index 0debcd193a..6ac314f64c 100644 --- a/src/include/nodes/parsenodes.h +++ b/src/include/nodes/parsenodes.h @@ -1539,7 +1539,7 @@ typedef enum GroupingSetKind typedef struct GroupingSet { NodeTag type; - GroupingSetKind kind pg_node_attr(query_jumble_ignore); + GroupingSetKind kind; List *content; ParseLoc location; } GroupingSet; -- 2.43.0