Re: Problem with custom aggregates and record pseudo-type

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Maxim Boguk <maxim(dot)boguk(at)gmail(dot)com>
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: Problem with custom aggregates and record pseudo-type
Date: 2011-12-01 16:19:38
Message-ID: 363.1322756378@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Maxim Boguk <maxim(dot)boguk(at)gmail(dot)com> writes:
> I created special custom aggregate function to append arrays defined as:
> CREATE AGGREGATE array_accum (anyarray)
> (
> sfunc = array_cat,
> stype = anyarray,
> initcond = '{}'
> );

> On arrays of common types it work without any problems:
> SELECT array_accum(i) from (values (ARRAY[1,2]), (ARRAY[3,4])) as t(i);
> array_accum
> -------------
> {1,2,3,4}
> (1 row)

> However once I try use it with record[] type I get an error:
> SELECT array_accum(i) from (values (ARRAY[row(1,2),row(2,3)]),
> (ARRAY[row(1,2),row(2,3)])) as t(i);
> ERROR: cannot concatenate incompatible arrays

Hm ... it looks like this case can be made to work with a simple adjustment
to getTypeIOData, but in the meantime you might be able to get away with
leaving the initial value as NULL (ie, leave off the initcond clause).
The only behavioral difference would be that you'd get NULL not an empty
array for zero rows of input.

regards, tom lane

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Merlin Moncure 2011-12-01 17:32:02 Re: Limiting number of connections to PostgreSQL per IP (not per DB/user)?
Previous Message Adrian Klaver 2011-12-01 15:23:25 Re: session hang for same row update