aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Haas <rhaas@postgresql.org>2017-03-15 12:28:54 -0400
committerRobert Haas <rhaas@postgresql.org>2017-03-15 12:28:54 -0400
commit1ea60ad602f9e97246958b721c8fa7c713aa86eb (patch)
treec751253d0339c9841b2bad9883f2727e99ebe764
parentc5832346625af4193b1242e57e7d13e66a220b38 (diff)
downloadpostgresql-1ea60ad602f9e97246958b721c8fa7c713aa86eb.tar.gz
postgresql-1ea60ad602f9e97246958b721c8fa7c713aa86eb.zip
Fix failure to use clamp_row_est() for parallel joins.
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
-rw-r--r--src/backend/optimizer/path/costsize.c21
1 files changed, 18 insertions, 3 deletions
diff --git a/src/backend/optimizer/path/costsize.c b/src/backend/optimizer/path/costsize.c
index cd6dcaab190..a129d1ecb3b 100644
--- a/src/backend/optimizer/path/costsize.c
+++ b/src/backend/optimizer/path/costsize.c
@@ -2147,7 +2147,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
@@ -2569,7 +2574,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
@@ -2952,7 +2962,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