0001-Replace-the-GROUP-BY-optimization-test-with-the-same.patch
text/plain
Filename: 0001-Replace-the-GROUP-BY-optimization-test-with-the-same.patch
Type: text/plain
Part: 0
Message:
Re: POC: GROUP BY optimization
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: format-patch
Series: patch 0001
Subject: Replace the GROUP-BY optimization test with the same based on something less volatile when the pg_class relation.
| File | + | − |
|---|---|---|
| src/test/regress/expected/aggregates.out | 15 | 17 |
| src/test/regress/sql/aggregates.sql | 3 | 6 |
From 11a049d95ee48e38ad569aab7663d8de91f946ad Mon Sep 17 00:00:00 2001
From: "Andrey V. Lepikhov" <a.lepikhov@postgrespro.ru>
Date: Fri, 2 Feb 2024 10:39:55 +0700
Subject: [PATCH] Replace the GROUP-BY optimization test with the same based on
something less volatile when the pg_class relation.
---
src/test/regress/expected/aggregates.out | 32 +++++++++++-------------
src/test/regress/sql/aggregates.sql | 9 +++----
2 files changed, 18 insertions(+), 23 deletions(-)
diff --git a/src/test/regress/expected/aggregates.out b/src/test/regress/expected/aggregates.out
index 7a73c19314..c2e1b8c9ed 100644
--- a/src/test/regress/expected/aggregates.out
+++ b/src/test/regress/expected/aggregates.out
@@ -2873,7 +2873,6 @@ SELECT y,x,array_agg(distinct w) FROM btg WHERE y < 0 GROUP BY x,y;
(6 rows)
RESET enable_incremental_sort;
-DROP TABLE btg;
-- The case, when scanning sort order correspond to aggregate sort order but
-- can not be found in the group-by list
CREATE TABLE agg_sort_order (c1 int PRIMARY KEY, c2 int);
@@ -2901,32 +2900,31 @@ DROP TABLE agg_sort_order CASCADE;
SET enable_hashjoin = off;
SET enable_nestloop = off;
explain (COSTS OFF)
-SELECT c1.relname,c1.relpages
-FROM pg_class c1 JOIN pg_class c2 ON (c1.relname=c2.relname AND c1.relpages=c2.relpages)
-GROUP BY c1.reltuples,c1.relpages,c1.relname
-ORDER BY c1.relpages, c1.relname, c1.relpages*c1.relpages;
- QUERY PLAN
----------------------------------------------------------------------------------------------
+SELECT b1.x,b1.w FROM btg b1 JOIN btg b2 ON (b1.z=b2.z AND b1.w=b2.w)
+GROUP BY b1.x,b1.z,b1.w ORDER BY b1.z, b1.w, b1.x*b1.x;
+ QUERY PLAN
+-------------------------------------------------------------------
Incremental Sort
- Sort Key: c1.relpages, c1.relname, ((c1.relpages * c1.relpages))
- Presorted Key: c1.relpages, c1.relname
+ Sort Key: b1.z, b1.w, ((b1.x * b1.x))
+ Presorted Key: b1.z, b1.w
-> Group
- Group Key: c1.relpages, c1.relname, c1.reltuples
+ Group Key: b1.z, b1.w, b1.x
-> Incremental Sort
- Sort Key: c1.relpages, c1.relname, c1.reltuples
- Presorted Key: c1.relpages, c1.relname
+ Sort Key: b1.z, b1.w, b1.x
+ Presorted Key: b1.z, b1.w
-> Merge Join
- Merge Cond: ((c1.relpages = c2.relpages) AND (c1.relname = c2.relname))
+ Merge Cond: ((b1.z = b2.z) AND (b1.w = b2.w))
-> Sort
- Sort Key: c1.relpages, c1.relname
- -> Seq Scan on pg_class c1
+ Sort Key: b1.z, b1.w
+ -> Seq Scan on btg b1
-> Sort
- Sort Key: c2.relpages, c2.relname
- -> Seq Scan on pg_class c2
+ Sort Key: b2.z, b2.w
+ -> Seq Scan on btg b2
(16 rows)
RESET enable_hashjoin;
RESET enable_nestloop;
+DROP TABLE btg;
RESET enable_hashagg;
RESET max_parallel_workers;
RESET max_parallel_workers_per_gather;
diff --git a/src/test/regress/sql/aggregates.sql b/src/test/regress/sql/aggregates.sql
index 916dbf908f..3548fbb8db 100644
--- a/src/test/regress/sql/aggregates.sql
+++ b/src/test/regress/sql/aggregates.sql
@@ -1229,8 +1229,6 @@ EXPLAIN (VERBOSE, COSTS OFF)
SELECT y,x,array_agg(distinct w) FROM btg WHERE y < 0 GROUP BY x,y;
RESET enable_incremental_sort;
-DROP TABLE btg;
-
-- The case, when scanning sort order correspond to aggregate sort order but
-- can not be found in the group-by list
CREATE TABLE agg_sort_order (c1 int PRIMARY KEY, c2 int);
@@ -1245,13 +1243,12 @@ DROP TABLE agg_sort_order CASCADE;
SET enable_hashjoin = off;
SET enable_nestloop = off;
explain (COSTS OFF)
-SELECT c1.relname,c1.relpages
-FROM pg_class c1 JOIN pg_class c2 ON (c1.relname=c2.relname AND c1.relpages=c2.relpages)
-GROUP BY c1.reltuples,c1.relpages,c1.relname
-ORDER BY c1.relpages, c1.relname, c1.relpages*c1.relpages;
+SELECT b1.x,b1.w FROM btg b1 JOIN btg b2 ON (b1.z=b2.z AND b1.w=b2.w)
+GROUP BY b1.x,b1.z,b1.w ORDER BY b1.z, b1.w, b1.x*b1.x;
RESET enable_hashjoin;
RESET enable_nestloop;
+DROP TABLE btg;
RESET enable_hashagg;
RESET max_parallel_workers;
RESET max_parallel_workers_per_gather;
--
2.43.0