aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/selfuncs.c
diff options
context:
space:
mode:
authorTomas Vondra <tomas.vondra@postgresql.org>2021-03-26 22:34:53 +0100
committerTomas Vondra <tomas.vondra@postgresql.org>2021-03-26 22:34:58 +0100
commit33e52ad9a32929a6d14dfd98a8440d57028f2e3e (patch)
treefbf8df234e380eee684ed792a7e8ef9b1082bec4 /src/backend/utils/adt/selfuncs.c
parenta14a0118a1fecf4066e53af52ed0f188607d0c4b (diff)
downloadpostgresql-33e52ad9a32929a6d14dfd98a8440d57028f2e3e.tar.gz
postgresql-33e52ad9a32929a6d14dfd98a8440d57028f2e3e.zip
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
Diffstat (limited to 'src/backend/utils/adt/selfuncs.c')
-rw-r--r--src/backend/utils/adt/selfuncs.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c
index 52314d3aa1c..2348d4a772a 100644
--- a/src/backend/utils/adt/selfuncs.c
+++ b/src/backend/utils/adt/selfuncs.c
@@ -3987,11 +3987,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;