| From: | Tender Wang <tndrwang(at)gmail(dot)com> |
|---|---|
| To: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
| Cc: | marian(dot)muller(at)serli(dot)com, pgsql-bugs(at)lists(dot)postgresql(dot)org, Richard Guo <guofenglinux(at)gmail(dot)com> |
| Subject: | Re: BUG #19353: Error XX000 if referencing expanded array in grouping set: variable not found in subplan target list |
| Date: | 2025-12-13 10:01:51 |
| Message-ID: | CAHewXN=JJfimxqas-T7PY_f=SAPfNRvsJEuT57=cZ-JSEd5f6w@mail.gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-bugs |
Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> 于2025年12月13日周六 00:54写道:
> PG Bug reporting form <noreply(at)postgresql(dot)org> writes:
> > After upgrading to Postgres 18 I've come across an error I wasn't getting
> > beforehand. Here's a minimal way to reproduce the issue, that used to
> work
> > well in Postgres 12 and 17 at least.
>
> Thank you for this well-crafted bug report! Bisecting shows that
> it broke at
>
> f5050f795aea67dfc40bbc429c8934e9439e22e7 is the first bad commit
> commit f5050f795aea67dfc40bbc429c8934e9439e22e7 (HEAD)
> Author: Richard Guo <rguo(at)postgresql(dot)org>
> Date: Tue Sep 10 12:36:48 2024 +0900
>
> Mark expressions nullable by grouping sets
>
> I have not dug any deeper than that.
>
> regards, tom lane
>
>
>
When there is SRF in the query, the grouping_target changes in
grouping_planner when entering the following function:
split_pathtarget_at_srfs(root, grouping_target, scanjoin_target,
&grouping_targets,
&grouping_targets_contain_srfs);
(gdb) pgprint grouping_target
PathTarget [sortgrouprefs=0x556daae88358 cost={startup = 0, per_tuple = 0}
width=72 has_volatile_expr=VOLATILITY_UNKNOWN]
[exprs]
Var [varno=1 varattno=3 vartype=1015 varcollid=100
varreturningtype=VAR_RETURNING_DEFAULT varnosyn=1
varattnosyn=3][varnullingrels] Bitmapset [2]
Var [varno=1 varattno=2 vartype=1015 varcollid=100
varreturningtype=VAR_RETURNING_DEFAULT varnosyn=1
varattnosyn=2][varnullingrels] Bitmapset [2]
Aggref [aggfnoid=2147 aggtype=20 inputcollid=100 aggtranstype=20
aggstar=false aggvariadic=false aggkind=110 'n' aggpresorted=false
agglevelsup=0 aggsplit=AGGSPLIT_SIMPLE
aggno=0 aggtransno=0][aggargtypes] OidList: [1043]
[args]
TargetEntry [resno=1 ressortgroupref=1]
Var [varno=1 varattno=1 vartype=1043 vartypmod=259 varcollid=100
varreturningtype=VAR_RETURNING_DEFAULT varnosyn=1 varattnosyn=1]
[aggdistinct]
SortGroupClause [tleSortGroupRef=1 eqop=98 sortop=664 reverse_sort=false
nulls_first=false hashable=true]
So the targetlist of Agg is :
gdb) pgprint plan->targetlist
TargetEntry [resno=1]
Var [varno=1 varattno=3 vartype=1015 varcollid=100
varreturningtype=VAR_RETURNING_DEFAULT varnosyn=1
varattnosyn=3][varnullingrels] Bitmapset [2]
TargetEntry [resno=2 ressortgroupref=1]
Var [varno=1 varattno=2 vartype=1015 varcollid=100
varreturningtype=VAR_RETURNING_DEFAULT varnosyn=1
varattnosyn=2][varnullingrels] Bitmapset [2]
TargetEntry [resno=3]
Aggref [aggfnoid=2147 aggtype=20 inputcollid=100 aggtranstype=20
aggstar=false aggvariadic=false aggkind=110 'n' aggpresorted=false
agglevelsup=0 aggsplit=AGGSPLIT_SIMPLE
aggno=0 aggtransno=0]
[aggargtypes] OidList: [1043]
[args]
TargetEntry [resno=1 ressortgroupref=1]
Var [varno=1 varattno=1 vartype=1043 vartypmod=259 varcollid=100
varreturningtype=VAR_RETURNING_DEFAULT varnosyn=1 varattnosyn=1]
[aggdistinct]
SortGroupClause [tleSortGroupRef=1 eqop=98 sortop=664 reverse_sort=false
nulls_first=false hashable=true]
But the subplan->targetlist is :
Var [varno=1 varattno=2 vartype=1015 varcollid=100
varreturningtype=VAR_RETURNING_DEFAULT varnosyn=1 varattnosyn=2]
FuncExpr [funcid=2331 funcresulttype=1043 funcretset=true
funcvariadic=false funcformat=COERCE_EXPLICIT_CALL funccollid=100
inputcollid=100]
Var [varno=1 varattno=3 vartype=1015 varcollid=100
varreturningtype=VAR_RETURNING_DEFAULT varnosyn=1 varattnosyn=3]
Var [varno=1 varattno=1 vartype=1043 vartypmod=259 varcollid=100
varreturningtype=VAR_RETURNING_DEFAULT varnosyn=1 varattnosyn=1]
in build_tlist_index(subplan->targetlist), varno = 1 varattno =3 will not
be added into tlist_vinfo array, so "ERROR: variable not found in subplan
target list"
will report because search_indexed_tlist_for_var() returning null
in fix_upper_expr_mutator().
--
Thanks,
Tender Wang
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Thomas Rosenstein | 2025-12-13 12:18:59 | recovery_target discrepancy? |
| Previous Message | yanliang lei | 2025-12-13 04:15:53 | Re:Re: Re: BUG #19351: in pg18.1,when not null exists in the table , and add constraint problem. |