Re: Using Expanded Objects other than Arrays from plpgsql
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Michel Pelletier <pelletier.michel@gmail.com>
Cc: Pavel Stehule <pavel.stehule@gmail.com>,
pgsql-hackers@lists.postgresql.org
Date: 2024-12-18T20:22:09Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Allow extension functions to participate in in-place updates.
- c366d2bdba7c 18.0 landed
-
Implement new optimization rule for updates of expanded variables.
- 6c7251db0ce1 18.0 landed
-
Detect whether plpgsql assignment targets are "local" variables.
- 36fb9ef269a0 18.0 landed
-
Preliminary refactoring of plpgsql expression construction.
- a654af21ae52 18.0 landed
-
Refactor pl_funcs.c to provide a usage-independent tree walker.
- 6a7283dd2f1c 18.0 landed
-
Generalize plpgsql's heuristic for importing expanded objects.
- 534d0ea6c2b9 18.0 landed
Michel Pelletier <pelletier.michel@gmail.com> writes: > My bad, sorry for the long confusing email, I figured out that I was > calling the wrong macro when getting my matrix datum and inadvertently > expanding RO pointers as well, I've fixed that issue, and everything is > working great! No extra expansions and my support functions are working > well, I need to go through a few more places in the API to add more support > but otherwise the fixes Tom has put into plpgsql have worked perfectly and > the library now appears to be behaving optimally! I can get down to doing > some benchmarks and head-to-head with the C and Python bindings to compare > against. So, just to clarify where we're at: you are satisfied that the current patch-set does what you need? The other task we'd talked about was generalizing the existing heuristics in exec_assign_value() and plpgsql_exec_function() that say that array-type values should be forced into expanded R/W form when being assigned to an array-type PL/pgSQL variable. The argument for that is that the PL/pgSQL function might subsequently do a lot of subscripted accesses to the array (which'd benefit from working with an expanded array) while never doing another assignment and thus not having any opportunity to revisit the decision. The counter-argument is that it might *not* do such accesses, so that the expansion was just a waste of cycles. So this is squishy enough that I'd prefer to have some solid use-cases to look at before trying to generalize it. It's sounding to me like you're going to end up in a place where all your values are passed around in expanded form already and so you have little need for that optimization. If so, I'd prefer not to go any further than the present patch-set for now. Adding "type support" hooks as discussed would be a substantial amount of work, so I'd like to have a more compelling case for it before doing that. regards, tom lane