回复: The issue of incorrect width estimation in UNION queries - Mailing list pgsql-bugs

From Wei Sun
Subject 回复: The issue of incorrect width estimation in UNION queries
Date
Msg-id tencent_6CF0214B232C068DD8FF3F735E6606F92A08@qq.com
Whole thread Raw
In response to Re: The issue of incorrect width estimation in UNION queries  (David Rowley <dgrowleyml@gmail.com>)
List pgsql-bugs
ok

Thank you for the reply,currently, we can also temporarily work around this issue by adding a hint, 
look forward to the fix in the master branch.

Regards
Wei Sun

------------------ 原始邮件 ------------------
发件人: "David Rowley" <dgrowleyml@gmail.com>;
发送时间: 2025年9月24日(星期三) 晚上6:47
收件人: "Wei Sun"<936739278@qq.com>;
抄送: "pgsql-bugs"<pgsql-bugs@lists.postgresql.org>;
主题: Re: The issue of incorrect width estimation in UNION queries

On Wed, 24 Sept 2025 at 18:13, sunw.fnst <936739278@qq.com> wrote:
>    ->  Append  (cost=0.00..4082.00 rows=200000 width=38) (actual time=0.016..39.050 rows=200000 loops=1)
>          ->  Seq Scan on t1  (cost=0.00..1541.00 rows=100000 width=11) (actual time=0.015..10.056 rows=100000 loo
> ps=1)
>          ->  Seq Scan on t2  (cost=0.00..1541.00 rows=100000 width=11) (actual time=0.018..10.654 rows=100000 loo
> ps=1)

This happens because in generate_union_paths() -> create_pathtarget()
-> set_pathtarget_cost_width() in get_expr_width(), the varno for the
union's RelOptInfo is 0, which results in using the get_typavgwidth()
result.

set_append_rel_size() does a better job of this for the UNION ALL code
path. Maybe we can copy the relevant parts of that.

Also, I think if we're doing this, then it'd be a master-only fix.
Changing this could result in plan changes in the back-branches, which
we normally try to avoid.  The attached patch is against master. I
need to spend a bit longer on this as generate_nonunion_paths() might
need the same treatment. I've just run out of time for tonight.

David

pgsql-bugs by date:

Previous
From: PG Bug reporting form
Date:
Subject: BUG #19062: PostgreSQL 12.22 does not compile because of conflicting types for CollationCreate
Next
From: PG Bug reporting form
Date:
Subject: BUG #19063: Heavily nesting trivial ROW projections produces out of memory error