mirror of
https://github.com/postgres/postgres.git
synced 2025-06-13 07:41:39 +03:00
Fix rescanning of async-aware Append nodes.
In cases where run-time pruning isn't required, the synchronous and
asynchronous subplans for an async-aware Append node determined using
classify_matching_subplans() should be re-used when rescanning the node,
but the previous code re-determined them using that function repeatedly
each time when rescanning the node, leading to incorrect results in a
normal build and an Assert failure in an Assert-enabled build as that
function doesn't assume that it's called repeatedly in such cases. Fix
the code as mentioned above.
My oversight in commit 27e1f1456
.
While at it, initialize async-related pointers/variables to NULL/zero
explicitly in ExecInitAppend() and ExecReScanAppend(), just to be sure.
(The variables would have been set to zero before we get to the latter
function, but let's do so.)
Reviewed-by: Kyotaro Horiguchi
Discussion: https://postgr.es/m/CAPmGK16Q4B2_KY%2BJH7rb7wQbw54AUprp7TMekGTd2T1B62yysQ%40mail.gmail.com
This commit is contained in:
@ -3157,6 +3157,18 @@ DELETE FROM join_tbl;
|
||||
|
||||
RESET enable_partitionwise_join;
|
||||
|
||||
-- Test rescan of an async Append node with do_exec_prune=false
|
||||
SET enable_hashjoin TO false;
|
||||
|
||||
EXPLAIN (VERBOSE, COSTS OFF)
|
||||
INSERT INTO join_tbl SELECT * FROM async_p1 t1, async_pt t2 WHERE t1.a = t2.a AND t1.b = t2.b AND t1.b % 100 = 0;
|
||||
INSERT INTO join_tbl SELECT * FROM async_p1 t1, async_pt t2 WHERE t1.a = t2.a AND t1.b = t2.b AND t1.b % 100 = 0;
|
||||
|
||||
SELECT * FROM join_tbl ORDER BY a1;
|
||||
DELETE FROM join_tbl;
|
||||
|
||||
RESET enable_hashjoin;
|
||||
|
||||
-- Test interaction of async execution with plan-time partition pruning
|
||||
EXPLAIN (VERBOSE, COSTS OFF)
|
||||
SELECT * FROM async_pt WHERE a < 3000;
|
||||
|
Reference in New Issue
Block a user