Thread: Slightly confused error message

Slightly confused error message

From
Markus Schaber
Date:
Hi,

I just stumbled over a slightly confused error message:

mydb=# select count(*),coverage_area from myschema.streets except select
cd as coverage_area from countryref.disks group by streets.coverage_area;
ERROR:  column "streets.coverage_area" must appear in the GROUP BY
clause or be used in an aggregate function

As the query looks, streets.coverage_area is actually used in the GROUP BY.

I know how to fix the query, but I wonder whether it is worth the effort
to try improving the error message.

Thanks,
Markus
-- 
Markus Schaber | Logical Tracking&Tracing International AG
Dipl. Inf.     | Software Development GIS

Fight against software patents in EU! www.ffii.org www.nosoftwarepatents.org


Re: Slightly confused error message

From
Tom Lane
Date:
Markus Schaber <schabi@logix-tt.com> writes:
> I just stumbled over a slightly confused error message:

> mydb=# select count(*),coverage_area from myschema.streets except select
> cd as coverage_area from countryref.disks group by streets.coverage_area;
> ERROR:  column "streets.coverage_area" must appear in the GROUP BY
> clause or be used in an aggregate function

> As the query looks, streets.coverage_area is actually used in the GROUP BY.

The complaint is 100% accurate; the subquery that it's unhappy about is
select count(*),coverage_area from myschema.streets

which is an aggregating query, but coverage_area is being used outside
an aggregate without having been grouped by.
        regards, tom lane


Re: Slightly confused error message

From
Markus Schaber
Date:
Hi, Tom,

Tom Lane wrote:

>>I just stumbled over a slightly confused error message:
> 
>>mydb=# select count(*),coverage_area from myschema.streets except select
>>cd as coverage_area from countryref.disks group by streets.coverage_area;
>>ERROR:  column "streets.coverage_area" must appear in the GROUP BY
>>clause or be used in an aggregate function
> 
>>As the query looks, streets.coverage_area is actually used in the GROUP BY.
> 
> The complaint is 100% accurate;

I know that, and won't deny.

> the subquery that it's unhappy about is
> 
>     select count(*),coverage_area from myschema.streets
> 
> which is an aggregating query, but coverage_area is being used outside
> an aggregate without having been grouped by.

Yes, and my question is whether it is easy and worth the effort. to add
that information (about the acutally offending subquery) to the message.

Thanks,
Markus

-- 
Markus Schaber | Logical Tracking&Tracing International AG
Dipl. Inf.     | Software Development GIS

Fight against software patents in EU! www.ffii.org www.nosoftwarepatents.org


Re: Slightly confused error message

From
Martin Marques
Date:
On Fri, 28 Apr 2006 12:07:04 -0400, Tom Lane <tgl@sss.pgh.pa.us> wrote:
> Markus Schaber <schabi@logix-tt.com> writes:
>> I just stumbled over a slightly confused error message:
> 
>> mydb=# select count(*),coverage_area from myschema.streets except select
>> cd as coverage_area from countryref.disks group by
> streets.coverage_area;
>> ERROR:  column "streets.coverage_area" must appear in the GROUP BY
>> clause or be used in an aggregate function
> 
>> As the query looks, streets.coverage_area is actually used in the GROUP
> BY.
> 
> The complaint is 100% accurate; the subquery that it's unhappy about is
> 
>     select count(*),coverage_area from myschema.streets
> 
> which is an aggregating query, but coverage_area is being used outside
> an aggregate without having been grouped by.

I see lack of parenthesis in the sub-query:

select count(*),coverage_area from myschema.streets except   (select cd as coverage_area from countryref.disks)
groupby streets.coverage_area;
 

-- 
---------------------------------------------------------
Lic. Martín Marqués         |   SELECT 'mmarques' || 
Centro de Telemática        |       '@' || 'unl.edu.ar';
Universidad Nacional        |   DBA, Programador,    del Litoral             |   Administrador
---------------------------------------------------------




Re: Slightly confused error message

From
Tom Lane
Date:
Markus Schaber <schabi@logix-tt.com> writes:
> Yes, and my question is whether it is easy and worth the effort. to add
> that information (about the acutally offending subquery) to the message.

I'm not sure about localizing the subquery per se, but it might be
possible to add a syntax pointer to the specific variable occurrence
that it's complaining about.  That would help at least somewhat in
cases like this.
        regards, tom lane