mirror of
https://github.com/postgres/postgres.git
synced 2026-10-23 13:29:09 +03:00
Fix a few mistakes in partition aggregate tests
The pattern seems to be to EXPLAIN the query to ensure we get the
expected partition-wise aggregate plan, then run the same query to check
the results are what we expect. A couple of places didn't use the same
query between the EXPLAIN and the checking of the results, which
effectively voided the plan check.
Additionally, a comment claimed array_agg() didn't support partial mode,
but that was made not true in 16fd03e95.
Author: Matthias van de Meent <boekewurm@gmail.com>
Reviewed-by: Pierre Forstmann <pierre.forstmann@gmail.com>
Reviewed-by: David Rowley <dgrowleyml@gmail.com>
Discussion: https://postgr.es/m/CAEze2WgjJUiqV-VZVrWqYz+ETLtd4oKk2gbvBWxf1Fo0is5XVQ@mail.gmail.com
Backpatch-through: 14
This commit is contained in:
@@ -980,8 +980,8 @@ SET max_parallel_workers_per_gather TO 2;
|
||||
SET parallel_setup_cost = 0;
|
||||
-- Full aggregation at level 1 as GROUP BY clause matches with PARTITION KEY
|
||||
-- for level 1 only. For subpartitions, GROUP BY clause does not match with
|
||||
-- PARTITION KEY, but still we do not see a partial aggregation as array_agg()
|
||||
-- is not partial agg safe.
|
||||
-- PARTITION KEY, but still we do not see a partial aggregation as
|
||||
-- array_agg(distinct) is not partial agg safe.
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT a, sum(b), array_agg(distinct c), count(*) FROM pagg_tab_ml GROUP BY a HAVING avg(b) < 3 ORDER BY 1, 2, 3;
|
||||
QUERY PLAN
|
||||
@@ -1119,13 +1119,14 @@ SELECT a, sum(b), count(*) FROM pagg_tab_ml GROUP BY a HAVING avg(b) < 3 ORDER B
|
||||
-- Partial aggregation at all levels as GROUP BY clause does not match with
|
||||
-- PARTITION KEY
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT b, sum(a), count(*) FROM pagg_tab_ml GROUP BY b ORDER BY 1, 2, 3;
|
||||
SELECT b, sum(a), count(*) FROM pagg_tab_ml GROUP BY b HAVING avg(a) < 15 ORDER BY 1, 2, 3;
|
||||
QUERY PLAN
|
||||
---------------------------------------------------------------------------
|
||||
Sort
|
||||
Sort Key: pagg_tab_ml.b, (sum(pagg_tab_ml.a)), (count(*))
|
||||
-> Finalize GroupAggregate
|
||||
Group Key: pagg_tab_ml.b
|
||||
Filter: (avg(pagg_tab_ml.a) < '15'::numeric)
|
||||
-> Sort
|
||||
Sort Key: pagg_tab_ml.b
|
||||
-> Append
|
||||
@@ -1144,7 +1145,7 @@ SELECT b, sum(a), count(*) FROM pagg_tab_ml GROUP BY b ORDER BY 1, 2, 3;
|
||||
-> Partial HashAggregate
|
||||
Group Key: pagg_tab_ml_4.b
|
||||
-> Seq Scan on pagg_tab_ml_p3_s2 pagg_tab_ml_4
|
||||
(22 rows)
|
||||
(23 rows)
|
||||
|
||||
SELECT b, sum(a), count(*) FROM pagg_tab_ml GROUP BY b HAVING avg(a) < 15 ORDER BY 1, 2, 3;
|
||||
b | sum | count
|
||||
@@ -1273,13 +1274,14 @@ SELECT a, sum(b), count(*) FROM pagg_tab_ml GROUP BY a HAVING avg(b) < 3 ORDER B
|
||||
-- Partial aggregation at all levels as GROUP BY clause does not match with
|
||||
-- PARTITION KEY
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT b, sum(a), count(*) FROM pagg_tab_ml GROUP BY b ORDER BY 1, 2, 3;
|
||||
SELECT b, sum(a), count(*) FROM pagg_tab_ml GROUP BY b HAVING avg(a) < 15 ORDER BY 1, 2, 3;
|
||||
QUERY PLAN
|
||||
------------------------------------------------------------------------------------------
|
||||
Sort
|
||||
Sort Key: pagg_tab_ml.b, (sum(pagg_tab_ml.a)), (count(*))
|
||||
-> Finalize GroupAggregate
|
||||
Group Key: pagg_tab_ml.b
|
||||
Filter: (avg(pagg_tab_ml.a) < '15'::numeric)
|
||||
-> Gather Merge
|
||||
Workers Planned: 2
|
||||
-> Sort
|
||||
@@ -1300,7 +1302,7 @@ SELECT b, sum(a), count(*) FROM pagg_tab_ml GROUP BY b ORDER BY 1, 2, 3;
|
||||
-> Partial HashAggregate
|
||||
Group Key: pagg_tab_ml_2.b
|
||||
-> Parallel Seq Scan on pagg_tab_ml_p2_s2 pagg_tab_ml_2
|
||||
(24 rows)
|
||||
(25 rows)
|
||||
|
||||
SELECT b, sum(a), count(*) FROM pagg_tab_ml GROUP BY b HAVING avg(a) < 15 ORDER BY 1, 2, 3;
|
||||
b | sum | count
|
||||
|
||||
@@ -233,8 +233,8 @@ SET parallel_setup_cost = 0;
|
||||
|
||||
-- Full aggregation at level 1 as GROUP BY clause matches with PARTITION KEY
|
||||
-- for level 1 only. For subpartitions, GROUP BY clause does not match with
|
||||
-- PARTITION KEY, but still we do not see a partial aggregation as array_agg()
|
||||
-- is not partial agg safe.
|
||||
-- PARTITION KEY, but still we do not see a partial aggregation as
|
||||
-- array_agg(distinct) is not partial agg safe.
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT a, sum(b), array_agg(distinct c), count(*) FROM pagg_tab_ml GROUP BY a HAVING avg(b) < 3 ORDER BY 1, 2, 3;
|
||||
SELECT a, sum(b), array_agg(distinct c), count(*) FROM pagg_tab_ml GROUP BY a HAVING avg(b) < 3 ORDER BY 1, 2, 3;
|
||||
@@ -255,7 +255,7 @@ SELECT a, sum(b), count(*) FROM pagg_tab_ml GROUP BY a HAVING avg(b) < 3 ORDER B
|
||||
-- Partial aggregation at all levels as GROUP BY clause does not match with
|
||||
-- PARTITION KEY
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT b, sum(a), count(*) FROM pagg_tab_ml GROUP BY b ORDER BY 1, 2, 3;
|
||||
SELECT b, sum(a), count(*) FROM pagg_tab_ml GROUP BY b HAVING avg(a) < 15 ORDER BY 1, 2, 3;
|
||||
SELECT b, sum(a), count(*) FROM pagg_tab_ml GROUP BY b HAVING avg(a) < 15 ORDER BY 1, 2, 3;
|
||||
|
||||
-- Full aggregation at all levels as GROUP BY clause matches with PARTITION KEY
|
||||
@@ -278,7 +278,7 @@ SELECT a, sum(b), count(*) FROM pagg_tab_ml GROUP BY a HAVING avg(b) < 3 ORDER B
|
||||
-- Partial aggregation at all levels as GROUP BY clause does not match with
|
||||
-- PARTITION KEY
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT b, sum(a), count(*) FROM pagg_tab_ml GROUP BY b ORDER BY 1, 2, 3;
|
||||
SELECT b, sum(a), count(*) FROM pagg_tab_ml GROUP BY b HAVING avg(a) < 15 ORDER BY 1, 2, 3;
|
||||
SELECT b, sum(a), count(*) FROM pagg_tab_ml GROUP BY b HAVING avg(a) < 15 ORDER BY 1, 2, 3;
|
||||
|
||||
-- Full aggregation at all levels as GROUP BY clause matches with PARTITION KEY
|
||||
|
||||
Reference in New Issue
Block a user