v1-0001-Skip-statistics-with-mismatching-stxdinherit-flag.patch
application/octet-stream
Filename: v1-0001-Skip-statistics-with-mismatching-stxdinherit-flag.patch
Type: application/octet-stream
Part: 0
Patch
Format: format-patch
Series: patch v1-0001
Subject: Skip statistics with mismatching stxdinherit flag
| File | + | − |
|---|---|---|
| src/backend/utils/adt/selfuncs.c | 9 | 2 |
From 95928d744e1721f03c6b44ede25d42d13b15e14e Mon Sep 17 00:00:00 2001
From: Richard Guo <guofenglinux@gmail.com>
Date: Mon, 31 Oct 2022 12:41:03 +0800
Subject: [PATCH v1] Skip statistics with mismatching stxdinherit flag
---
src/backend/utils/adt/selfuncs.c | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c
index 69e0fb98f5..d597b7e81f 100644
--- a/src/backend/utils/adt/selfuncs.c
+++ b/src/backend/utils/adt/selfuncs.c
@@ -3913,7 +3913,7 @@ estimate_multivariate_ndistinct(PlannerInfo *root, RelOptInfo *rel,
Oid statOid = InvalidOid;
MVNDistinct *stats;
StatisticExtInfo *matched_info = NULL;
- RangeTblEntry *rte;
+ RangeTblEntry *rte = planner_rt_fetch(rel->relid, root);
/* bail out immediately if the table has no extended statistics */
if (!rel->statlist)
@@ -3933,6 +3933,10 @@ estimate_multivariate_ndistinct(PlannerInfo *root, RelOptInfo *rel,
if (info->kind != STATS_EXT_NDISTINCT)
continue;
+ /* skip statistics with mismatching stxdinherit value */
+ if (info->inherit != rte->inh)
+ continue;
+
/*
* Determine how many expressions (and variables in non-matched
* expressions) match. We'll then use these numbers to pick the
@@ -4004,7 +4008,6 @@ estimate_multivariate_ndistinct(PlannerInfo *root, RelOptInfo *rel,
Assert(nmatches_vars + nmatches_exprs > 1);
- rte = planner_rt_fetch(rel->relid, root);
stats = statext_ndistinct_load(statOid, rte->inh);
/*
@@ -5241,6 +5244,10 @@ examine_variable(PlannerInfo *root, Node *node, int varRelid,
if (info->kind != STATS_EXT_EXPRESSIONS)
continue;
+ /* skip stats with mismatching stxdinherit value */
+ if (info->inherit != rte->inh)
+ continue;
+
pos = 0;
foreach(expr_item, info->exprs)
{
--
2.31.0