<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="" style="margin: 0in; font-family: Calibri; font-size: 11pt;"><span lang="en-US" class="">I have a table contain a column of </span><span lang="zh-CN" class="">geometry</span><span lang="en-US" class=""> TYPE like this:</span></div><p lang="en-US" class="" style="margin: 0in; font-family: Calibri; font-size: 11pt;"> </p><div class="" style="margin: 0in; font-family: Calibri; font-size: 11pt;">```</div><div class="" style="margin: 0in; font-family: Calibri; font-size: 11pt;">gds=# \d testgeom;</div><div class="" style="margin: 0in; font-family: Calibri; font-size: 11pt;">  Column  |   Type   | Modifiers</div><div class="" style="margin: 0in; font-family: Calibri; font-size: 11pt;">----------+----------+-----------</div><div class="" style="margin: 0in; font-family: Calibri; font-size: 11pt;"> the_geom | geometry |</div><div class="" style="margin: 0in; font-family: Calibri; font-size: 11pt;">```</div><p lang="en-US" class="" style="margin: 0in; font-family: Calibri; font-size: 11pt;"> </p><div class="" style="margin: 0in; font-family: Calibri; font-size: 11pt;"><span lang="en-US" class="">The table </span><span lang="zh-CN" class="">testgeom</span><span lang="en-US" class=""> has 3 records and I run the sql as follow:</span></div><p lang="en-US" class="" style="margin: 0in; font-family: Calibri; font-size: 11pt;"> </p><div class="" style="margin: 0in; font-family: Calibri; font-size: 11pt;">```</div><div class="" style="margin: 0in; font-family: Calibri; font-size: 11pt;"><span lang="zh-CN" class=""> select</span><span lang="en-US" class=""> </span><span lang="zh-CN" class="">the_geom</span><span lang="en-US" class=""> </span><span lang="zh-CN" class="">from testgeom</span><span lang="en-US" class=""> </span><span lang="zh-CN" class="">where ST_Intersects(the_geom,ST_GeomFromText( 'POLYGON((80.4748535 32.2128011,80.4858398 32.2128011,80.4858398 32.2035053,80.4748535 32.2035053,80.4748535 32.2128011))',4326))</span></div><div class="" style="margin: 0in; font-family: Calibri; font-size: 11pt;">                                                                               )</div><div class="" style="margin: 0in; font-family: Calibri; font-size: 11pt;">```</div><p lang="en-US" class="" style="margin: 0in; font-family: Calibri; font-size: 11pt;"> </p><div class="" style="margin: 0in; font-size: 11pt;"><span lang="zh-CN" class="" style="font-family: 'Microsoft YaHei';">Unfortunately</span><span lang="en-US" class="" style="font-family: Calibri;">, it raise a core:</span></div><p lang="en-US" class="" style="margin: 0in; font-family: Calibri; font-size: 11pt;"> </p><div class="" style="margin: 0in; font-family: Calibri; font-size: 11pt;">```</div><div class="" style="margin: 0in; font-family: Calibri; font-size: 11pt;">#0  0x00007f081fca48a5 in raise () from /lib64/libc.so.6</div><div class="" style="margin: 0in; font-family: Calibri; font-size: 11pt;">#1  0x00007f081fca6085 in abort () from /lib64/libc.so.6</div><div class="" style="margin: 0in; font-family: Calibri; font-size: 11pt;">#2  0x00000000008f7e5e in ExceptionalCondition (</div><div class="" style="margin: 0in; font-family: Calibri; font-size: 11pt;">    conditionName=0xa86098 "!(rel->rows > 0 || ((rel)->cheapest_total_path != ((void *)0) && (((((const Node*)(((rel)->cheapest_total_path)))->type) == T_AppendPath) && ((AppendPath *) ((rel)->cheapest_total_path))->subpaths == "..., errorType=0xa8600b "FailedAssertion", fileName=0xa86000 "allpaths.c", lineNumber=350)</div><div class="" style="margin: 0in; font-family: Calibri; font-size: 11pt;">    at assert.c:54</div><div class="" style="margin: 0in; font-family: Calibri; font-size: 11pt;">#3  0x00000000006d5930 in set_rel_size (root=0x2c6c138, rel=0x2c834c0, rti=5, rte=0x2c7bc60) at allpaths.c:350</div><div class="" style="margin: 0in; font-family: Calibri; font-size: 11pt;">```</div><div class="" style="margin: 0in; font-size: 11pt;"><span lang="en-US" class="" style="font-family: Calibri;">I find rel->rows is not a number . I gdb it and find that the zero </span><span lang="zh-CN" class="" style="font-family: 'Microsoft YaHei';">i</span><span lang="en-US" class="" style="font-family: Calibri;">s </span><span lang="zh-CN" class="" style="font-family: 'Microsoft YaHei';">t</span><span lang="en-US" class="" style="font-family: Calibri;">he divisor in the </span><span lang="zh-CN" class="" style="font-family: Calibri;">gserialized_estimate</span><span lang="en-US" class="" style="font-family: Calibri;">.c:1899:</span></div><div class="" style="margin: 0in; font-size: 11pt;"><span lang="en-US" class="" style="font-family: Calibri;"><br class=""></span></div><div class="" style="margin: 0in; font-size: 11pt;"><span lang="en-US" class="" style="font-family: Calibri;">```</span></div><div style="margin: 0in; font-family: Calibri; font-size: 11pt;" class=""><span class="" style="color: rgb(36, 41, 46); font-family: SFMono-Regular; background-color: rgb(255, 255, 255);">cell_size[d] = (max[d] - min[d]) / nd_stats->size[d];</span> </div><div style="margin: 0in; font-family: Calibri; font-size: 11pt;" class="">```</div><div class=""><br class=""></div><div class="" style="margin: 0in; font-family: Calibri; font-size: 11pt;"><span lang="en-US" class="">The <span class="" style="color: rgb(36, 41, 46); font-family: SFMono-Regular; background-color: rgb(255, 255, 255);">nd_stats->size</span> comes from the column </span><span lang="zh-CN" class="">stanumbers</span><span lang="en-US" class="">N table pg_statistic as follow:</span></div><p lang="en-US" class="" style="margin: 0in; font-family: Calibri; font-size: 11pt;"> </p><div class="" style="margin: 0in; font-family: Calibri; font-size: 11pt;">```</div><div class="" style="margin: 0in; font-family: Calibri; font-size: 11pt;"><span lang="zh-CN" class="">stanumbers1 | {2,</span><span lang="en-US" class="">0</span><span lang="zh-CN" class="">,</span><span lang="en-US" class="">0</span><span lang="zh-CN" class="">,0,0,80.4356,32.1458,0,0,80.5024,32.3317,0,0,7,7,7,7,1,7,7}</span></div><div class="" style="margin: 0in; font-family: Calibri; font-size: 11pt;">```</div><div class="" style="margin: 0in; font-family: Calibri; font-size: 11pt;"><br class=""></div><div class="" style="margin: 0in; font-size: 11pt;"><span lang="en-US" class="" style="font-family: Calibri;">So I find function </span><span lang="zh-CN" class="" style="font-family: 'Microsoft YaHei';">compute_gserialized_stats_mode</span><span lang="en-US" class="" style="font-family: Calibri;">  in the </span><span lang="zh-CN" class="" style="font-family: Calibri;">gserialized_estimate.c</span><span lang="en-US" class="" style="font-family: Calibri;">:1425</span></div><p lang="en-US" class="" style="margin: 0in; font-family: Calibri; font-size: 11pt;"> </p><div class="" style="margin: 0in; font-family: Calibri; font-size: 11pt;">```</div><div class="" style="margin: 0in;"><span class="" style="font-family: 'Microsoft YaHei'; font-size: 11pt;">histo_cells_target = </span><span class="" style="font-family: SFMono-Regular; font-size: 9pt; color: rgb(0, 134, 179); background-color: white;">Min</span><span class="" style="font-family: 'Microsoft YaHei'; font-size: 11pt;">(histo_cells_target, (</span><span class="" style="font-family: SFMono-Regular; font-size: 9pt; color: rgb(167, 29, 93); background-color: white;">int</span><span class="" style="font-family: 'Microsoft YaHei'; font-size: 11pt;">)(total_rows/</span><span class="" style="font-family: SFMono-Regular; font-size: 9pt; color: rgb(0, 134, 179); background-color: white;">5</span><span class="" style="font-family: 'Microsoft YaHei'; font-size: 11pt;">));</span></div><div class="" style="margin: 0in; font-family: Calibri; font-size: 11pt;">```</div><div class="" style="margin: 0in; font-family: Calibri; font-size: 11pt;"><br class=""></div><div class="" style="margin: 0in; font-size: 11pt;"><span lang="en-US" class="" style="font-family: Calibri;">When </span><span lang="zh-CN" class="" style="font-family: 'Microsoft YaHei';">total_rows</span><span lang="en-US" class="" style="font-family: Calibri;"> is </span><span lang="zh-CN" class="" style="font-family: 'Microsoft YaHei';">greater than</span><span lang="en-US" class="" style="font-family: Calibri;"> 0 and less than 5, </span><span lang="zh-CN" class="" style="font-family: 'Microsoft YaHei';">histo_cells_target</span><span lang="en-US" class="" style="font-family: Calibri;"> will be zero and it will </span><span lang="zh-CN" class="" style="font-family: Calibri;">cause</span><span lang="en-US" class="" style="font-family: Calibri;"> the error.</span></div><p lang="en-US" class="" style="margin: 0in; font-family: Calibri; font-size: 11pt;"> </p><div class="" style="margin: 0in; font-size: 11pt;"><span lang="en-US" class="" style="font-family: Calibri;">But I wonder why this </span><span lang="zh-CN" class="" style="font-family: 'Microsoft YaHei';">histo_cells_target</span><span lang="en-US" class="" style="font-family: Calibri;"> can be zero. Is it a bug ? Can I fix it by this:</span></div><p lang="en-US" class="" style="margin: 0in; font-family: Calibri; font-size: 11pt;"> </p><div class="" style="margin: 0in; font-family: Calibri; font-size: 11pt;">```</div><div class="" style="margin: 0in;"><span lang="zh-CN" class="" style="font-family: 'Microsoft YaHei'; font-size: 11pt;">histo_cells_target = </span><span lang="zh-CN" class="" style="font-family: SFMono-Regular; font-size: 9pt; color: rgb(0, 134, 179); background-color: white;">Min</span><span lang="zh-CN" class="" style="font-family: 'Microsoft YaHei'; font-size: 11pt;">(histo_cells_target, </span><span lang="en-US" class="" style="font-family: Calibri; font-size: 11pt;">Max(1, </span><span lang="zh-CN" class="" style="font-family: 'Microsoft YaHei'; font-size: 11pt;">(</span><span lang="zh-CN" class="" style="font-family: SFMono-Regular; font-size: 9pt; color: rgb(167, 29, 93); background-color: white;">int</span><span lang="zh-CN" class="" style="font-family: 'Microsoft YaHei'; font-size: 11pt;">)(total_rows/</span><span lang="zh-CN" class="" style="font-family: SFMono-Regular; font-size: 9pt; color: rgb(0, 134, 179); background-color: white;">5</span><span lang="zh-CN" class="" style="font-family: 'Microsoft YaHei'; font-size: 11pt;">))</span><span lang="en-US" class="" style="font-family: Calibri; font-size: 11pt;">)</span><span lang="zh-CN" class="" style="font-family: 'Microsoft YaHei'; font-size: 11pt;">;</span></div><div class="" style="margin: 0in; font-family: Calibri; font-size: 11pt;">```</div></body></html>