On Wed, 2005-02-02 at 23:22 -0500, Tom Lane wrote: > Neil Conway <[EMAIL PROTECTED]> writes: > > neilc=# select a, (select * from abc) from abc; > > ERROR: subquery must return only one column > > > Is there a reason we can't treat a subselect in the target list as > > returning a composite type? > > Given the 8.0 infrastructure for unnamed record types it might be > possible to do that; it was surely never possible before. Whether it's > a good idea is another question. The syntax you are showing is designed > to return a scalar. It will (and should) barf on multiple rows as well > as multiple columns.
Right, the point is, that is does not, if said srf-function is written in say, C. However, this is somewhat similar to the WITH LATERAL clause previously discussed in connection with UNNEST and multisets, so perhaps it's not such a bad idea after all? > > For that matter, is this behavior also intentional? > > > neilc=# select a, foo_abc2() FROM abc; > > ERROR: set-valued function called in context that cannot accept a set > > CONTEXT: PL/pgSQL function "foo_abc2" line 1 at return next > > It's an implementation restriction in plpgsql: we didn't make it support > the old-style SRF API. I'm unconvinced that it's worth fixing > considering that this whole behavior (SRFs in the targetlist) is > deprecated. > > regards, tom lane > > ---------------------------(end of broadcast)--------------------------- > TIP 7: don't forget to increase your free space map settings -- John Hansen <[EMAIL PROTECTED]> GeekNET ---------------------------(end of broadcast)--------------------------- TIP 9: the planner will ignore your desire to choose an index scan if your joining column's datatypes do not match