diff -U3 /tmp/cirrus-ci-build/src/test/regress/expected/eager_aggregate.out /tmp/cirrus-ci-build/build-32/testrun/regress/regress/results/eager_aggregate.out --- /tmp/cirrus-ci-build/src/test/regress/expected/eager_aggregate.out 2024-03-09 17:22:41.663043220 +0000 +++ /tmp/cirrus-ci-build/build-32/testrun/regress/regress/results/eager_aggregate.out 2024-03-09 17:29:51.274683470 +0000 @@ -20,27 +20,24 @@ -- and finalize the aggregation. EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.a, avg(t2.c) FROM eager_agg_t1 t1 JOIN eager_agg_t2 t2 ON t1.b = t2.b GROUP BY t1.a ORDER BY t1.a; - QUERY PLAN ------------------------------------------------------------------- - Finalize GroupAggregate + QUERY PLAN +------------------------------------------------------------ + GroupAggregate Output: t1.a, avg(t2.c) Group Key: t1.a -> Sort - Output: t1.a, (PARTIAL avg(t2.c)) + Output: t1.a, t2.c Sort Key: t1.a -> Hash Join - Output: t1.a, (PARTIAL avg(t2.c)) - Hash Cond: (t1.b = t2.b) - -> Seq Scan on public.eager_agg_t1 t1 - Output: t1.a, t1.b, t1.c + Output: t1.a, t2.c + Hash Cond: (t2.b = t1.b) + -> Seq Scan on public.eager_agg_t2 t2 + Output: t2.a, t2.b, t2.c -> Hash - Output: t2.b, (PARTIAL avg(t2.c)) - -> Partial HashAggregate - Output: t2.b, PARTIAL avg(t2.c) - Group Key: t2.b - -> Seq Scan on public.eager_agg_t2 t2 - Output: t2.a, t2.b, t2.c -(18 rows) + Output: t1.a, t1.b + -> Seq Scan on public.eager_agg_t1 t1 + Output: t1.a, t1.b +(15 rows) SELECT t1.a, avg(t2.c) FROM eager_agg_t1 t1 JOIN eager_agg_t2 t2 ON t1.b = t2.b GROUP BY t1.a ORDER BY t1.a; a | avg @@ -60,30 +57,24 @@ SET enable_hashagg TO off; EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.a, avg(t2.c) FROM eager_agg_t1 t1 JOIN eager_agg_t2 t2 ON t1.b = t2.b GROUP BY t1.a ORDER BY t1.a; - QUERY PLAN ------------------------------------------------------------------------- - Finalize GroupAggregate + QUERY PLAN +------------------------------------------------------------ + GroupAggregate Output: t1.a, avg(t2.c) Group Key: t1.a -> Sort - Output: t1.a, (PARTIAL avg(t2.c)) + Output: t1.a, t2.c Sort Key: t1.a -> Hash Join - Output: t1.a, (PARTIAL avg(t2.c)) - Hash Cond: (t1.b = t2.b) - -> Seq Scan on public.eager_agg_t1 t1 - Output: t1.a, t1.b, t1.c + Output: t1.a, t2.c + Hash Cond: (t2.b = t1.b) + -> Seq Scan on public.eager_agg_t2 t2 + Output: t2.a, t2.b, t2.c -> Hash - Output: t2.b, (PARTIAL avg(t2.c)) - -> Partial GroupAggregate - Output: t2.b, PARTIAL avg(t2.c) - Group Key: t2.b - -> Sort - Output: t2.c, t2.b - Sort Key: t2.b - -> Seq Scan on public.eager_agg_t2 t2 - Output: t2.c, t2.b -(21 rows) + Output: t1.a, t1.b + -> Seq Scan on public.eager_agg_t1 t1 + Output: t1.a, t1.b +(15 rows) SELECT t1.a, avg(t2.c) FROM eager_agg_t1 t1 JOIN eager_agg_t2 t2 ON t1.b = t2.b GROUP BY t1.a ORDER BY t1.a; a | avg @@ -107,34 +98,31 @@ -- and finalize the aggregation. EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.a, avg(t2.c + t3.c) FROM eager_agg_t1 t1 JOIN eager_agg_t2 t2 ON t1.b = t2.b JOIN eager_agg_t3 t3 ON t2.a = t3.a GROUP BY t1.a ORDER BY t1.a; - QUERY PLAN ------------------------------------------------------------------------------- - Finalize GroupAggregate + QUERY PLAN +------------------------------------------------------------------ + GroupAggregate Output: t1.a, avg((t2.c + t3.c)) Group Key: t1.a -> Sort - Output: t1.a, (PARTIAL avg((t2.c + t3.c))) + Output: t1.a, t2.c, t3.c Sort Key: t1.a -> Hash Join - Output: t1.a, (PARTIAL avg((t2.c + t3.c))) - Hash Cond: (t1.b = t2.b) - -> Seq Scan on public.eager_agg_t1 t1 - Output: t1.a, t1.b, t1.c + Output: t1.a, t2.c, t3.c + Hash Cond: (t2.b = t1.b) + -> Hash Join + Output: t2.c, t2.b, t3.c + Hash Cond: (t3.a = t2.a) + -> Seq Scan on public.eager_agg_t3 t3 + Output: t3.a, t3.b, t3.c + -> Hash + Output: t2.c, t2.b, t2.a + -> Seq Scan on public.eager_agg_t2 t2 + Output: t2.c, t2.b, t2.a -> Hash - Output: t2.b, (PARTIAL avg((t2.c + t3.c))) - -> Partial HashAggregate - Output: t2.b, PARTIAL avg((t2.c + t3.c)) - Group Key: t2.b - -> Hash Join - Output: t2.c, t3.c, t2.b - Hash Cond: (t3.a = t2.a) - -> Seq Scan on public.eager_agg_t3 t3 - Output: t3.a, t3.b, t3.c - -> Hash - Output: t2.c, t2.b, t2.a - -> Seq Scan on public.eager_agg_t2 t2 - Output: t2.c, t2.b, t2.a -(25 rows) + Output: t1.a, t1.b + -> Seq Scan on public.eager_agg_t1 t1 + Output: t1.a, t1.b +(22 rows) SELECT t1.a, avg(t2.c + t3.c) FROM eager_agg_t1 t1 JOIN eager_agg_t2 t2 ON t1.b = t2.b JOIN eager_agg_t3 t3 ON t2.a = t3.a GROUP BY t1.a ORDER BY t1.a; a | avg @@ -154,37 +142,31 @@ SET enable_hashagg TO off; EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.a, avg(t2.c + t3.c) FROM eager_agg_t1 t1 JOIN eager_agg_t2 t2 ON t1.b = t2.b JOIN eager_agg_t3 t3 ON t2.a = t3.a GROUP BY t1.a ORDER BY t1.a; - QUERY PLAN ------------------------------------------------------------------------------------- - Finalize GroupAggregate + QUERY PLAN +------------------------------------------------------------------ + GroupAggregate Output: t1.a, avg((t2.c + t3.c)) Group Key: t1.a -> Sort - Output: t1.a, (PARTIAL avg((t2.c + t3.c))) + Output: t1.a, t2.c, t3.c Sort Key: t1.a -> Hash Join - Output: t1.a, (PARTIAL avg((t2.c + t3.c))) - Hash Cond: (t1.b = t2.b) - -> Seq Scan on public.eager_agg_t1 t1 - Output: t1.a, t1.b, t1.c + Output: t1.a, t2.c, t3.c + Hash Cond: (t2.b = t1.b) + -> Hash Join + Output: t2.c, t2.b, t3.c + Hash Cond: (t3.a = t2.a) + -> Seq Scan on public.eager_agg_t3 t3 + Output: t3.a, t3.b, t3.c + -> Hash + Output: t2.c, t2.b, t2.a + -> Seq Scan on public.eager_agg_t2 t2 + Output: t2.c, t2.b, t2.a -> Hash - Output: t2.b, (PARTIAL avg((t2.c + t3.c))) - -> Partial GroupAggregate - Output: t2.b, PARTIAL avg((t2.c + t3.c)) - Group Key: t2.b - -> Sort - Output: t2.c, t3.c, t2.b - Sort Key: t2.b - -> Hash Join - Output: t2.c, t3.c, t2.b - Hash Cond: (t3.a = t2.a) - -> Seq Scan on public.eager_agg_t3 t3 - Output: t3.a, t3.b, t3.c - -> Hash - Output: t2.c, t2.b, t2.a - -> Seq Scan on public.eager_agg_t2 t2 - Output: t2.c, t2.b, t2.a -(28 rows) + Output: t1.a, t1.b + -> Seq Scan on public.eager_agg_t1 t1 + Output: t1.a, t1.b +(22 rows) SELECT t1.a, avg(t2.c + t3.c) FROM eager_agg_t1 t1 JOIN eager_agg_t2 t2 ON t1.b = t2.b JOIN eager_agg_t3 t3 ON t2.a = t3.a GROUP BY t1.a ORDER BY t1.a; a | avg @@ -207,27 +189,24 @@ -- Ensure aggregation can be pushed down to the non-nullable side EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.a, avg(t2.c) FROM eager_agg_t1 t1 RIGHT JOIN eager_agg_t2 t2 ON t1.b = t2.b GROUP BY t1.a ORDER BY t1.a; - QUERY PLAN ------------------------------------------------------------------- - Finalize GroupAggregate + QUERY PLAN +------------------------------------------------------------ + GroupAggregate Output: t1.a, avg(t2.c) Group Key: t1.a -> Sort - Output: t1.a, (PARTIAL avg(t2.c)) + Output: t1.a, t2.c Sort Key: t1.a - -> Hash Right Join - Output: t1.a, (PARTIAL avg(t2.c)) - Hash Cond: (t1.b = t2.b) - -> Seq Scan on public.eager_agg_t1 t1 - Output: t1.a, t1.b, t1.c + -> Hash Left Join + Output: t1.a, t2.c + Hash Cond: (t2.b = t1.b) + -> Seq Scan on public.eager_agg_t2 t2 + Output: t2.a, t2.b, t2.c -> Hash - Output: t2.b, (PARTIAL avg(t2.c)) - -> Partial HashAggregate - Output: t2.b, PARTIAL avg(t2.c) - Group Key: t2.b - -> Seq Scan on public.eager_agg_t2 t2 - Output: t2.a, t2.b, t2.c -(18 rows) + Output: t1.a, t1.b + -> Seq Scan on public.eager_agg_t1 t1 + Output: t1.a, t1.b +(15 rows) SELECT t1.a, avg(t2.c) FROM eager_agg_t1 t1 RIGHT JOIN eager_agg_t2 t2 ON t1.b = t2.b GROUP BY t1.a ORDER BY t1.a; a | avg