mirror of
https://github.com/postgres/postgres.git
synced 2025-06-05 23:56:58 +03:00
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
This commit is contained in:
parent
1d7a479d22
commit
de1ca6919f
@ -334,6 +334,7 @@ ExecReScanGatherMerge(GatherMergeState *node)
|
|||||||
ExecShutdownGatherMergeWorkers(node);
|
ExecShutdownGatherMergeWorkers(node);
|
||||||
|
|
||||||
node->initialized = false;
|
node->initialized = false;
|
||||||
|
node->gm_initialized = false;
|
||||||
|
|
||||||
if (node->pei)
|
if (node->pei)
|
||||||
ExecParallelReinitialize(node->pei);
|
ExecParallelReinitialize(node->pei);
|
||||||
|
@ -300,6 +300,49 @@ select count(*) from tenk1 group by twenty;
|
|||||||
500
|
500
|
||||||
(20 rows)
|
(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
|
-- gather merge test with 0 worker
|
||||||
set max_parallel_workers = 0;
|
set max_parallel_workers = 0;
|
||||||
explain (costs off)
|
explain (costs off)
|
||||||
|
@ -118,6 +118,22 @@ explain (costs off)
|
|||||||
|
|
||||||
select count(*) from tenk1 group by twenty;
|
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
|
-- gather merge test with 0 worker
|
||||||
set max_parallel_workers = 0;
|
set max_parallel_workers = 0;
|
||||||
explain (costs off)
|
explain (costs off)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user