diff options
author | Robert Haas <rhaas@postgresql.org> | 2017-03-07 10:22:07 -0500 |
---|---|---|
committer | Robert Haas <rhaas@postgresql.org> | 2017-03-07 10:22:07 -0500 |
commit | 655393a022bd653e2b48dbf20b69236981e35195 (patch) | |
tree | 90ded750bd3a37b7130133b32ccc65c9dc8d656e /src/backend/optimizer | |
parent | b2678efd43f17db7dfa04e0ca076ea01275cd9bc (diff) | |
download | postgresql-655393a022bd653e2b48dbf20b69236981e35195.tar.gz |
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
Diffstat (limited to 'src/backend/optimizer')
-rw-r--r-- | src/backend/optimizer/path/joinpath.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/backend/optimizer/path/joinpath.c b/src/backend/optimizer/path/joinpath.c index 2897245883..99ec5834bf 100644 --- a/src/backend/optimizer/path/joinpath.c +++ b/src/backend/optimizer/path/joinpath.c @@ -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); |