Thread: BUG #5385: gd disallows agg function in subselect of update

BUG #5385: gd disallows agg function in subselect of update

From
"Corin"
Date:
The following bug has been logged online:

Bug reference:      5385
Logged by:          Corin
Email address:      wakathane@gmail.com
PostgreSQL version: 8.4.2
Operating system:   ubuntu amd64
Description:        gd disallows agg function in subselect of update
Details:

query:
UPDATE imagecontest_participations AS g SET rating_ratings_sum=(SELECT
SUM(rating_ratings_sum) FROM imagecontest_participation_ratings WHERE
imagecontest_participation_id=g.id)

error message:
cannot use aggregate function in UPDATE

while looking for a solution I found this commit:
http://archives.postgresql.org/pgsql-committers/2006-06/msg00299.php
... "Disallow aggregate functions in UPDATE commands (unless within a
sub-SELECT).
This is disallowed by the SQL spec because it doesn't have any very
sensible
interpretation." ...

As the subquery is not top-level but inside a subquery I suspect this being
an error. I don't want to use the UPDATE ... FROM syntax if possible to keep
compatibility with other sql servers.

Re: BUG #5385: gd disallows agg function in subselect of update

From
Corin
Date:
Sorry, stupid me - it's not a bug, pg is perfectly right!

The query was just wrong, because I used the wrong column in the
SUM(...) function.

Sorry again,
Corin

Re: BUG #5385: gd disallows agg function in subselect of update

From
Tom Lane
Date:
Corin <wakathane@gmail.com> writes:
> Sorry, stupid me - it's not a bug, pg is perfectly right!
> The query was just wrong, because I used the wrong column in the
> SUM(...) function.

Yah.  The reason the error message was phrased that way is that the SUM
argument is a variable of the outer query, so the aggregate is also
considered an aggregate of the outer query.

            regards, tom lane