Thread: PostgreSQL documentation specifies 2-element array for float8_accum but 3-element array expected

I was learning how to create my own aggregate functions from
http://www.postgresql.org/docs/9.0/static/xaggr.html

I copied the avg() example as

CREATE TABLE numbers (
    value integer
);

insert into numbers values (2);
insert into numbers values (3);
insert into numbers values (4);

CREATE AGGREGATE myavg(float8) (
    sfunc = float8_accum,
    stype = float8[],
    finalfunc = float8_avg,
    initcond = '{0,0}'
);

On trying to run this, I get this error:

cdb=# select myavg(value) from numbers;
ERROR:  float8_accum: expected 3-element float8 array

How can I fix this?

On Wed, Mar 23, 2011 at 8:03 AM, Disc Magnet <discmagnet@gmail.com> wrote:
> I was learning how to create my own aggregate functions from
> http://www.postgresql.org/docs/9.0/static/xaggr.html
>
> I copied the avg() example as
>
> CREATE TABLE numbers (
>    value integer
> );
>
> insert into numbers values (2);
> insert into numbers values (3);
> insert into numbers values (4);
>
> CREATE AGGREGATE myavg(float8) (
>    sfunc = float8_accum,
>    stype = float8[],
>    finalfunc = float8_avg,
>    initcond = '{0,0}'
> );
>
> On trying to run this, I get this error:
>
> cdb=# select myavg(value) from numbers;
> ERROR:  float8_accum: expected 3-element float8 array
>
> How can I fix this?

how embarrassing -- the initcont should be: '{0,0,0}' :^).

merlin

Disc Magnet <discmagnet@gmail.com> writes:
> CREATE AGGREGATE myavg(float8) (
>     sfunc = float8_accum,
>     stype = float8[],
>     finalfunc = float8_avg,
>     initcond = '{0,0}'
> );

> On trying to run this, I get this error:

> cdb=# select myavg(value) from numbers;
> ERROR:  float8_accum: expected 3-element float8 array

Hm, it looks like that example has been wrong from day one ---
float8_accum has expected a 3-element array for its entire existence.
I thought maybe the code and docs had gotten out of sync later, but
AFAICS this was a thinko in the original commit.  Should say
    initcond = '{0,0,0}'

            regards, tom lane