Skip to content
Snippets Groups Projects
Commit 0044f456 authored by Tom Lane's avatar Tom Lane
Browse files

Ignore extra subquery outputs in set_subquery_size_estimates().

In commit 0f61d4dd, 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.
parent 4d001c35
No related branches found
No related tags found
No related merge requests found
......@@ -3700,6 +3700,15 @@ set_subquery_size_estimates(PlannerInfo *root, RelOptInfo *rel)
if (te->resjunk)
continue;
/*
* The subquery could be an expansion of a view that's had columns
* added to it since the current query was parsed, so that there are
* non-junk tlist columns in it that don't correspond to any column
* visible at our query level. Ignore such columns.
*/
if (te->resno < rel->min_attr || te->resno > rel->max_attr)
continue;
/*
* XXX This currently doesn't work for subqueries containing set
* operations, because the Vars in their tlists are bogus references
......@@ -3721,7 +3730,6 @@ set_subquery_size_estimates(PlannerInfo *root, RelOptInfo *rel)
item_width = subrel->attr_widths[var->varattno - subrel->min_attr];
}
Assert(te->resno >= rel->min_attr && te->resno <= rel->max_attr);
rel->attr_widths[te->resno - rel->min_attr] = item_width;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment