Fix parallel hash join path search.
When the very cheapest path is not parallel-safe, we want to instead use the cheapest unparameterized path that is. The old code searched innerrel->cheapest_parameterized_paths, but that isn't right, because the path we want may not be in that list. Search innerrel->pathlist instead. Spotted by Dilip Kumar. Discussion: http://postgr.es/m/CAFiTN-szCEcZrQm0i_w4xqSaRUTOUFstNu32Zn4rxxDcoa8gnA@mail.gmail.com
This commit is contained in:
parent
b2678efd43
commit
655393a022
|
@ -1510,9 +1510,9 @@ hash_inner_and_outer(PlannerInfo *root,
|
|||
/*
|
||||
* Normally, given that the joinrel is parallel-safe, the cheapest
|
||||
* total inner path will also be parallel-safe, but if not, we'll
|
||||
* have to search cheapest_parameterized_paths for the cheapest
|
||||
* safe, unparameterized inner path. If doing JOIN_UNIQUE_INNER,
|
||||
* we can't use any alternative inner path.
|
||||
* have to search for the cheapest safe, unparameterized inner
|
||||
* path. If doing JOIN_UNIQUE_INNER, we can't use any alternative
|
||||
* inner path.
|
||||
*/
|
||||
if (cheapest_total_inner->parallel_safe)
|
||||
cheapest_safe_inner = cheapest_total_inner;
|
||||
|
@ -1520,7 +1520,7 @@ hash_inner_and_outer(PlannerInfo *root,
|
|||
{
|
||||
ListCell *lc;
|
||||
|
||||
foreach(lc, innerrel->cheapest_parameterized_paths)
|
||||
foreach(lc, innerrel->pathlist)
|
||||
{
|
||||
Path *innerpath = (Path *) lfirst(lc);
|
||||
|
||||
|
|
Loading…
Reference in New Issue