mirror of
https://github.com/postgres/postgres.git
synced 2025-11-19 13:42:17 +03:00
Adjust overly strict Assert
3373c7155 changed how we determine EquivalenceClasses for relations and
added an Assert to ensure all relations mentioned in each EC's ec_relids
was a RELOPT_BASEREL. However, the join removal code may remove a LEFT
JOIN and since it does not clean up EC members belonging to the removed
relations it can leave RELOPT_DEADREL rels in ec_relids.
Fix this by adjusting the Assert to allow RELOPT_DEADREL rels too.
Reported-by: sqlsmith via Andreas Seltenreich
Discussion: https://postgr.es/m/87y30r8sls.fsf@ansel.ydns.eu
This commit is contained in:
@@ -761,7 +761,8 @@ get_eclass_for_sort_expr(PlannerInfo *root,
|
|||||||
{
|
{
|
||||||
RelOptInfo *rel = root->simple_rel_array[i];
|
RelOptInfo *rel = root->simple_rel_array[i];
|
||||||
|
|
||||||
Assert(rel->reloptkind == RELOPT_BASEREL);
|
Assert(rel->reloptkind == RELOPT_BASEREL ||
|
||||||
|
rel->reloptkind == RELOPT_DEADREL);
|
||||||
|
|
||||||
rel->eclass_indexes = bms_add_member(rel->eclass_indexes,
|
rel->eclass_indexes = bms_add_member(rel->eclass_indexes,
|
||||||
ec_index);
|
ec_index);
|
||||||
|
|||||||
Reference in New Issue
Block a user