mirror of
https://github.com/zebrajr/postgres.git
synced 2025-12-07 00:20:24 +01:00
Fix ndistinct estimates with system attributes
When estimating the number of groups using extended statistics, the code
was discarding information about system attributes. This led to strange
situation that
SELECT 1 FROM t GROUP BY ctid;
could have produced higher estimate (equal to pg_class.reltuples) than
SELECT 1 FROM t GROUP BY a, b, ctid;
with extended statistics on (a,b). Fixed by retaining information about
the system attribute.
Backpatch all the way to 10, where extended statistics were introduced.
Author: Tomas Vondra
Backpatch-through: 10
This commit is contained in:
parent
d544671f15
commit
e5eb40eed4
|
|
@ -3851,11 +3851,11 @@ estimate_multivariate_ndistinct(PlannerInfo *root, RelOptInfo *rel,
|
|||
|
||||
attnum = ((Var *) varinfo->var)->varattno;
|
||||
|
||||
if (!AttrNumberIsForUserDefinedAttr(attnum))
|
||||
if (AttrNumberIsForUserDefinedAttr(attnum) &&
|
||||
bms_is_member(attnum, matched))
|
||||
continue;
|
||||
|
||||
if (!bms_is_member(attnum, matched))
|
||||
newlist = lappend(newlist, varinfo);
|
||||
newlist = lappend(newlist, varinfo);
|
||||
}
|
||||
|
||||
*varinfos = newlist;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user