Re: BUG #19370: PG18 returns incorrect array slice results when slice bounds depend on another array expression
Andres Freund <andres@anarazel.de>
From: Andres Freund <andres@anarazel.de>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: David Rowley <dgrowleyml@gmail.com>, redraiment@gmail.com, pgsql-bugs@lists.postgresql.org
Date: 2026-01-06T17:42:56Z
Lists: pgsql-bugs
Attachments
- param_set_vs_subscript.diff (text/x-diff) patch
Hi, On 2026-01-06 11:40:01 -0500, Tom Lane wrote: > I wrote: > > After re-reading that patch, I suspect an aliasing problem, > > specifically from this bit in ExecInitSubPlanExpr: > > > * ... No > > * danger of conflicts with other uses of resvalue/resnull as storing and > > * using the value always is in subsequent steps. > > > ExecInitExprRec(arg, state, > > &state->resvalue, &state->resnull); > > Yup, that's it. The problem occurs when a SubPlan is in the > subscripts of an array reference. In that case, > ExecInitSubscriptingRef has already emitted code to load the source > array into its target resv/resnull, which might well be the > ExprState's resvalue/resnull. I see we pinpointed the same thing... > So it's not okay for the array subscript calculation steps to overwrite the > ExprState's resvalue/resnull, but ExecInitSubPlanExpr thinks it can. But I'm less sure that the problem is ExecInitSubPlanExpr()'s use of state->resvalue, rather than ExecInitSubscriptingRef() belief that the *resv value won't change. If I could travel through time, I'd tell younger Andres to introduce explicit variables to the expression interpretation thingymagick... > We *could* safely use ExecInitSubPlanExpr's target resv/resnull, > but that doesn't line up with EEOP_PARAM_SET's definition: > ExecEvalParamSet is hard-wired to store from state->resvalue/resnull. > I thought all along that that was probably too simplistic. > > We could either generalize EEOP_PARAM_SET to include an explicit > specification of the source value's address That's pretty trivial, see attached. I don't quite understand why I didn't go that way immediately... At the very least we need to create a simplified testcase for the bug at hand. > or insert some kind of LOAD operation to copy the computed value into > state->resvalue/resnull. I don't see anything that looks like that today, > though. Hm, wouldn't that have exactly the same issues as we have today anyway? Greetings, Andres Freund
Commits
-
Fix buggy interaction between array subscripts and subplan params
- bdc5dedfcaa5 18.2 landed
- 75609fded35e 19 (unreleased) landed