On Sat, 20 Jun 2026 at 14:21, Richard Guo <[email protected]> wrote:
> I noticed that UNION's output rowcount estimate can be very wrong, as
> the planner ignores the duplicate removal and just uses the total
> input size.

I believe this should make the following code redundant, so shouldn't
the patch remove it too?

/*
* Estimate the number of UNION output rows.  In the case when only a
* single UNION child remains, we can use estimate_num_groups() on
* that child.  We must be careful not to do this when that child is
* the result of some other set operation as the targetlist will
* contain Vars with varno==0, which estimate_num_groups() wouldn't
* like.
*/
if (list_length(cheapest.subpaths) == 1 &&
    first_path->parent->reloptkind != RELOPT_UPPER_REL)
{
    dNumGroups = estimate_num_groups(root,
             first_path->pathtarget->exprs,
             first_path->rows,
             NULL,
             NULL);
}

Then you may as well pass dNumChildGroups directly to the path
creation functions and get rid of your new "With multiple children,"
comment.

Aside from that, I don't see any issues.

David


Reply via email to