Skip to content

Commit d931ac0

Browse files
committed
Ignore extra subquery outputs in set_subquery_size_estimates().
In commit 0f61d4d, I added code to copy up column width estimates for each column of a subquery. That code supposed that the subquery couldn't have any output columns that didn't correspond to known columns of the current query level --- which is true when a query is parsed from scratch, but the assumption fails when planning a view that depends on another view that's been redefined (adding output columns) since the upper view was made. This results in an assertion failure or even a crash, as per bug #8025 from lindebg. Remove the Assert and instead skip the column if its resno is out of the expected range.
1 parent 64f8909 commit d931ac0

File tree

1 file changed

+9
-1
lines changed

1 file changed

+9
-1
lines changed

src/backend/optimizer/path/costsize.c

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3741,6 +3741,15 @@ set_subquery_size_estimates(PlannerInfo *root, RelOptInfo *rel)
37413741
if (te->resjunk)
37423742
continue;
37433743

3744+
/*
3745+
* The subquery could be an expansion of a view that's had columns
3746+
* added to it since the current query was parsed, so that there are
3747+
* non-junk tlist columns in it that don't correspond to any column
3748+
* visible at our query level. Ignore such columns.
3749+
*/
3750+
if (te->resno < rel->min_attr || te->resno > rel->max_attr)
3751+
continue;
3752+
37443753
/*
37453754
* XXX This currently doesn't work for subqueries containing set
37463755
* operations, because the Vars in their tlists are bogus references
@@ -3762,7 +3771,6 @@ set_subquery_size_estimates(PlannerInfo *root, RelOptInfo *rel)
37623771

37633772
item_width = subrel->attr_widths[var->varattno - subrel->min_attr];
37643773
}
3765-
Assert(te->resno >= rel->min_attr && te->resno <= rel->max_attr);
37663774
rel->attr_widths[te->resno - rel->min_attr] = item_width;
37673775
}
37683776

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy