Skip to content
Snippets Groups Projects
Commit de1ca691 authored by Tom Lane's avatar Tom Lane
Browse files

Fix ExecReScanGatherMerge.

Not surprisingly, since it'd never ever been tested, ExecReScanGatherMerge
didn't work.  Fix it, and add a regression test case to exercise it.

Amit Kapila

Discussion: https://postgr.es/m/CAA4eK1JkByysFJNh9M349u_nNjqETuEnY_y1VUc_kJiU0bxtaQ@mail.gmail.com
parent 1d7a479d
No related branches found
No related tags found
No related merge requests found
......@@ -334,6 +334,7 @@ ExecReScanGatherMerge(GatherMergeState *node)
ExecShutdownGatherMergeWorkers(node);
node->initialized = false;
node->gm_initialized = false;
if (node->pei)
ExecParallelReinitialize(node->pei);
......
......@@ -300,6 +300,49 @@ select count(*) from tenk1 group by twenty;
500
(20 rows)
--test rescan behavior of gather merge
set enable_material = false;
explain (costs off)
select * from
(select string4, count(unique2)
from tenk1 group by string4 order by string4) ss
right join (values (1),(2),(3)) v(x) on true;
QUERY PLAN
----------------------------------------------------------
Nested Loop Left Join
-> Values Scan on "*VALUES*"
-> Finalize GroupAggregate
Group Key: tenk1.string4
-> Gather Merge
Workers Planned: 4
-> Partial GroupAggregate
Group Key: tenk1.string4
-> Sort
Sort Key: tenk1.string4
-> Parallel Seq Scan on tenk1
(11 rows)
select * from
(select string4, count(unique2)
from tenk1 group by string4 order by string4) ss
right join (values (1),(2),(3)) v(x) on true;
string4 | count | x
---------+-------+---
AAAAxx | 2500 | 1
HHHHxx | 2500 | 1
OOOOxx | 2500 | 1
VVVVxx | 2500 | 1
AAAAxx | 2500 | 2
HHHHxx | 2500 | 2
OOOOxx | 2500 | 2
VVVVxx | 2500 | 2
AAAAxx | 2500 | 3
HHHHxx | 2500 | 3
OOOOxx | 2500 | 3
VVVVxx | 2500 | 3
(12 rows)
reset enable_material;
-- gather merge test with 0 worker
set max_parallel_workers = 0;
explain (costs off)
......
......@@ -118,6 +118,22 @@ explain (costs off)
select count(*) from tenk1 group by twenty;
--test rescan behavior of gather merge
set enable_material = false;
explain (costs off)
select * from
(select string4, count(unique2)
from tenk1 group by string4 order by string4) ss
right join (values (1),(2),(3)) v(x) on true;
select * from
(select string4, count(unique2)
from tenk1 group by string4 order by string4) ss
right join (values (1),(2),(3)) v(x) on true;
reset enable_material;
-- gather merge test with 0 worker
set max_parallel_workers = 0;
explain (costs off)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment