mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-01-18 18:44:06 +08: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
b5178c5d08
commit
a2b70c89ca
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user