Re: Implement targetlist SRFs using ROWS FROM() (was Changed SRF in targetlist handling)
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Andres Freund <andres@anarazel.de>
Cc: pgsql-hackers@postgresql.org
Date: 2016-09-12T18:05:33Z
Lists: pgsql-hackers
Andres Freund <andres@anarazel.de> writes: > On 2016-09-12 13:48:05 -0400, Tom Lane wrote: >> Andres Freund <andres@anarazel.de> writes: >>> I kind of like ROWS FROM (... AS VALUE), that seems to confer the >>> meaning quite well. As VALUE isn't a reserved keyword, that'd afaik only >>> really work inside ROWS FROM() where AS is required. >> Hm, wouldn't ... AS RECORD convey the meaning better? > I was kind of envisioning AS VALUE to work for composite types without > removing their original type (possibly even for TYPEFUNC_SCALAR > ones). Maybe. A problem with any of these proposals though is that there's no place to put a column alias. Yeah, you can stick it on outside the ROWS FROM, but it seems a bit non-orthogonal to have to do it that way when you can do it inside the ROWS FROM when adding a coldeflist. Maybe we could do it like ROWS FROM (func(...) AS alias) where the difference from a coldeflist is that there's no parenthesized list of names/types. It's a bit weird that adding an alias makes for a semantic not just naming difference, but it's no weirder than these other ideas. >> (Although once you look at it that way, it's just a cast spelled in >> an idiosyncratic fashion.) > Well, not quite, by virtue of keeping the original type around. After a > record cast you likely couldn't directly access the columns anymore, > even if it were a known composite type, right? Same is true for any of these syntax proposals, no? So far as the rest of the query is concerned, the function output is going to be an anonymous record type. regards, tom lane
Commits
-
Remove obsoleted code relating to targetlist SRF evaluation.
- ea15e18677fc 10.0 landed
-
Doc: improve documentation of new SRF-in-tlist behavior.
- f13a1277aa2d 10.0 landed
-
Move targetlist SRF handling from expression evaluation to new executor node.
- 69f4b9c85f16 10.0 landed
-
Don't split up SRFs when choosing to postpone SELECT output expressions.
- d543170f2fdd 9.6.0 cited