Re: plpgsql setof help - Mailing list pgsql-sql

From Tom Lane
Subject Re: plpgsql setof help
Date
Msg-id 6023.1233188981@sss.pgh.pa.us
Whole thread Raw
In response to plpgsql setof help  ("Matthew T. O'Connor" <matthew@zeut.net>)
Responses Re: plpgsql setof help  (Frank Bax <fbax@sympatico.ca>)
List pgsql-sql
"Matthew T. O'Connor" <matthew@zeut.net> writes:
> I want the following:
> select column_to_english_list( select towns from towns_table );

> to return:
> 'town1, town2 and town3'

> In order to do this, I think I would have to create a pl/pgsql function 
> that accpts a setof text argument, but I'm not sure that's allowed.  

Well, if you are okay with writing

select column_to_english_list( 'select towns from towns_table' );

(ie, pass the subquery as a string) then you could do something
involving FOR ... IN EXECUTE $1.

I wonder though if it wouldn't be better to recast the problem as an
aggregate:

select column_to_english_list(towns) from towns_table;

probably using text[] as the transition state, and having the
transition function just accumulate all the words into the array
and then the final function decides where to plaster commas and
"and"s.

You can find examples of similar aggregates in the PG archives, IIRC.
        regards, tom lane


pgsql-sql by date:

Previous
From: "Matthew T. O'Connor"
Date:
Subject: plpgsql setof help
Next
From: Frank Bax
Date:
Subject: Re: plpgsql setof help