]> granicus.if.org Git - postgresql/commitdiff
Forbid parallel Hash Right Join or Hash Full Join.
authorRobert Haas <rhaas@postgresql.org>
Wed, 20 Apr 2016 21:48:55 +0000 (17:48 -0400)
committerRobert Haas <rhaas@postgresql.org>
Wed, 20 Apr 2016 21:48:55 +0000 (17:48 -0400)
That won't work.  You'll get bogus null-extended rows.

Mithun Cy

src/backend/optimizer/path/joinpath.c

index 41b60d01d37f4e4c1157a6e3551025f796f8eb14..f8e02b9c45de6a5963fe724f753efcb80b48e9a2 100644 (file)
@@ -1450,10 +1450,14 @@ hash_inner_and_outer(PlannerInfo *root,
                 * If the joinrel is parallel-safe, we may be able to consider a
                 * partial hash join.  However, we can't handle JOIN_UNIQUE_OUTER,
                 * because the outer path will be partial, and therefore we won't be
-                * able to properly guarantee uniqueness.  Also, the resulting path
-                * must not be parameterized.
+                * able to properly guarantee uniqueness.  Similarly, we can't handle
+                * JOIN_FULL and JOIN_RIGHT, because they can produce false null
+                * extended rows.  Also, the resulting path must not be parameterized.
                 */
-               if (joinrel->consider_parallel && jointype != JOIN_UNIQUE_OUTER &&
+               if (joinrel->consider_parallel &&
+                       jointype != JOIN_UNIQUE_OUTER &&
+                       jointype != JOIN_FULL &&
+                       jointype != JOIN_RIGHT &&
                        outerrel->partial_pathlist != NIL &&
                        bms_is_empty(joinrel->lateral_relids))
                {