Re: plpgsql setof help

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: "Matthew T(dot) O'Connor" <matthew(at)zeut(dot)net>
Cc: pgsql-sql(at)postgresql(dot)org
Subject: Re: plpgsql setof help
Date: 2009-01-29 00:29:41
Message-ID: 6023.1233188981@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

"Matthew T. O'Connor" <matthew(at)zeut(dot)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

In response to

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message Frank Bax 2009-01-29 00:49:45 Re: plpgsql setof help
Previous Message Matthew T. O'Connor 2009-01-28 23:37:06 plpgsql setof help