diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c index 14e0885f19f..4450f0d682f 100644 --- a/src/backend/utils/adt/selfuncs.c +++ b/src/backend/utils/adt/selfuncs.c @@ -5240,6 +5240,8 @@ examine_variable(PlannerInfo *root, Node *node, int varRelid, /* skip stats without per-expression stats */ if (info->kind != STATS_EXT_EXPRESSIONS) continue; + if (info->inherit != rte->inh) + continue;
pos = 0; foreach(expr_item, info->exprs)
I think we also need to do this when loading the ndistinct value, to skip statistics with mismatching stxdinherit in estimate_multivariate_ndistinct().
To be concrete, I mean something like attached.
BTW, I noticed a micro-optimization opportunity in examine_variable that we can fetch the RangeTblEntry for 'onerel' outside the foreach loop when iterating the extended stats so that we can do it only once rather than for each stat.