Re: BUG #7622: Incorrect aggregate level processing

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: andrew(at)tao11(dot)riddles(dot)org(dot)uk
Cc: pgsql-bugs(at)postgresql(dot)org
Subject: Re: BUG #7622: Incorrect aggregate level processing
Date: 2012-10-26 13:44:44
Message-ID: 20677.1351259084@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

andrew(at)tao11(dot)riddles(dot)org(dot)uk writes:
> select (select array_agg(random()*i) from (values (1),(2)) v(a)) from
> generate_series(1,3) i;

> Expected output is three rows each with a 2-element array; actual output
> is:

> ERROR: more than one row returned by a subquery used as an expression

> Looking at the explain, the aggregate is being pulled out of the subplan and
> evaluated at the top query level. (This came up while doing some random data
> generation, I've simplified it a bit.)

This is not a bug, it's the behavior required by SQL standard. An
aggregate belongs to the lowest query level supplying a variable to it
(except of course when it contains no variable at all). So it's
effectively an outer-reference constant for that inner select.

regards, tom lane

In response to

Browse pgsql-bugs by date

  From Date Subject
Next Message louis-claude.canon 2012-10-26 19:15:58 BUG #7623: Inconsistency on transaction isolation documentation
Previous Message Владимир Сошенко 2012-10-26 12:37:09 Installation issue