diff options
author | Robert Haas <rhaas@postgresql.org> | 2017-03-15 12:28:54 -0400 |
---|---|---|
committer | Robert Haas <rhaas@postgresql.org> | 2017-03-15 12:28:54 -0400 |
commit | 1ea60ad602f9e97246958b721c8fa7c713aa86eb (patch) | |
tree | c751253d0339c9841b2bad9883f2727e99ebe764 | |
parent | c5832346625af4193b1242e57e7d13e66a220b38 (diff) | |
download | postgresql-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.c | 21 |
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 |