]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Fix failure to use clamp_row_est() for parallel joins.
authorRobert Haas <rhaas@postgresql.org>
Wed, 15 Mar 2017 16:28:54 +0000 (12:28 -0400)
committerRobert Haas <rhaas@postgresql.org>
Wed, 15 Mar 2017 16:41:00 +0000 (12:41 -0400)
Commit 0c2070cefa0e5d097b715c9a3b9b5499470019aa neglected to use
clamp_row_est() where it should have done so.

Patch by me.  Report by Amit Kapila.

Discussion: http://postgr.es/m/CAA4eK1KPm8RYa1Kun3ZmQj9pb723b-EFN70j47Pid1vn3ByquA@mail.gmail.com

src/backend/optimizer/path/costsize.c

index cc708a6ffbc1c80bf305293a0879fa96235ca2f1..3b5576694eb02120d1d58cb548cc975e2e9c979a 100644 (file)
@@ -1998,7 +1998,12 @@ final_cost_nestloop(PlannerInfo *root, NestPath *path,
 
        /* For partial paths, scale row estimate. */
        if (path->path.parallel_workers > 0)
-               path->path.rows /= get_parallel_divisor(&path->path);
+       {
+               double  parallel_divisor = get_parallel_divisor(&path->path);
+
+               path->path.rows =
+                       clamp_row_est(path->path.rows / parallel_divisor);
+       }
 
        /*
         * We could include disable_cost in the preliminary estimate, but that
@@ -2420,7 +2425,12 @@ final_cost_mergejoin(PlannerInfo *root, MergePath *path,
 
        /* For partial paths, scale row estimate. */
        if (path->jpath.path.parallel_workers > 0)
-               path->jpath.path.rows /= get_parallel_divisor(&path->jpath.path);
+       {
+               double  parallel_divisor = get_parallel_divisor(&path->jpath.path);
+
+               path->jpath.path.rows =
+                       clamp_row_est(path->jpath.path.rows / parallel_divisor);
+       }
 
        /*
         * We could include disable_cost in the preliminary estimate, but that
@@ -2803,7 +2813,12 @@ final_cost_hashjoin(PlannerInfo *root, HashPath *path,
 
        /* For partial paths, scale row estimate. */
        if (path->jpath.path.parallel_workers > 0)
-               path->jpath.path.rows /= get_parallel_divisor(&path->jpath.path);
+       {
+               double  parallel_divisor = get_parallel_divisor(&path->jpath.path);
+
+               path->jpath.path.rows =
+                       clamp_row_est(path->jpath.path.rows / parallel_divisor);
+       }
 
        /*
         * We could include disable_cost in the preliminary estimate, but that