diff options
Diffstat (limited to 'src/backend/statistics/dependencies.c')
-rw-r--r-- | src/backend/statistics/dependencies.c | 22 |
1 files changed, 9 insertions, 13 deletions
diff --git a/src/backend/statistics/dependencies.c b/src/backend/statistics/dependencies.c index bbc29b67117..34326d55619 100644 --- a/src/backend/statistics/dependencies.c +++ b/src/backend/statistics/dependencies.c @@ -619,14 +619,16 @@ dependency_is_fully_matched(MVDependency *dependency, Bitmapset *attnums) * Load the functional dependencies for the indicated pg_statistic_ext tuple */ MVDependencies * -statext_dependencies_load(Oid mvoid) +statext_dependencies_load(Oid mvoid, bool inh) { MVDependencies *result; bool isnull; Datum deps; HeapTuple htup; - htup = SearchSysCache1(STATEXTDATASTXOID, ObjectIdGetDatum(mvoid)); + htup = SearchSysCache2(STATEXTDATASTXOID, + ObjectIdGetDatum(mvoid), + BoolGetDatum(inh)); if (!HeapTupleIsValid(htup)) elog(ERROR, "cache lookup failed for statistics object %u", mvoid); @@ -1417,16 +1419,6 @@ dependencies_clauselist_selectivity(PlannerInfo *root, Node **unique_exprs; int unique_exprs_cnt; - /* - * When dealing with regular inheritance trees, ignore extended stats - * (which were built without data from child rels, and thus do not - * represent them). For partitioned tables data there's no data in the - * non-leaf relations, so we build stats only for the inheritance tree. - * So for partitioned tables we do consider extended stats. - */ - if (rte->inh && rte->relkind != RELKIND_PARTITIONED_TABLE) - return 1.0; - /* check if there's any stats that might be useful for us. */ if (!has_stats_of_kind(rel->statlist, STATS_EXT_DEPENDENCIES)) return 1.0; @@ -1610,6 +1602,10 @@ dependencies_clauselist_selectivity(PlannerInfo *root, if (stat->kind != STATS_EXT_DEPENDENCIES) continue; + /* skip statistics with mismatching stxdinherit value */ + if (stat->inherit != rte->inh) + continue; + /* * Count matching attributes - we have to undo the attnum offsets. The * input attribute numbers are not offset (expressions are not @@ -1656,7 +1652,7 @@ dependencies_clauselist_selectivity(PlannerInfo *root, if (nmatched + nexprs < 2) continue; - deps = statext_dependencies_load(stat->statOid); + deps = statext_dependencies_load(stat->statOid, rte->inh); /* * The expressions may be represented by different attnums in the |