Re: group by true now errors with non-integer constant in GROUP BY

From: Vik Fearing <vik(at)postgresfriends(dot)org>
To: Laurenz Albe <laurenz(dot)albe(at)cybertec(dot)at>, Dennis Brouwer <dennis(dot)brouwer(at)kizitos(dot)com>, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: John Naylor <john(dot)naylor(at)enterprisedb(dot)com>, David Micallef <david(dot)j(dot)micallef(at)gmail(dot)com>, Peter Eisentraut <peter(dot)eisentraut(at)enterprisedb(dot)com>, pgsql-bugs(at)lists(dot)postgresql(dot)org
Subject: Re: group by true now errors with non-integer constant in GROUP BY
Date: 2023-10-20 05:44:23
Message-ID: 18ba0d29-0637-48c5-a11d-19f8672a8b0f@postgresfriends.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

On 10/19/23 15:18, Laurenz Albe wrote:
> On Thu, 2023-10-19 at 14:07 +0200, Dennis Brouwer wrote:
>> Hibernate is a widely used framework and this library will compose queries
>> (under certain conditions (still unknown to me))
>> with GROUP BY coulmn1, column2, true <--
>>
>> Hibernate has been doing this quircky thing for many many years and even
>> in the latest release does so. So, potentionally many Java Enterprise
>> applications will be tied to postgresql-14 if there is no compatibility
>> switch possible.
>>
>> In our case a tiny compatability switch would be a livesaver. Of courcse,
>> I will try to convince the Hibernate community to have this unnecessary
>> constant removed but that still leaves all legacy code to not work with
>> postgresql-15+ databases which would be pitiful!
>
> I understand your pain.
>
> But according to my reading of the SQL standard, it only allows for
> regular column references in GROUP BY. Unless I got something wrong,
> that would mean the the ball is in Hibernate's court. It ought to
> produce correct SQL.

The answer is not as easy as that. It is true that the standard
requires a <column reference> for each element of the GROUP BY clause,
but it is also true that PostgreSQL allows arbitrary expressions.

Why is this non-standard query allowed:

vik=# select true group by true or true;
?column?
----------
t
(1 row)

but not this one?

vik=# select true group by true;
ERROR: non-integer constant in GROUP BY
LINE 1: select true group by true;
^

I may have oversimplified this example, but as long as the value is
present in the SELECT, logic would dictate that we can group by it.

The correct thing to do would be to *at least* get rid of the horrible
monstrosity that is "GROUP BY 1", but that is probably never going to
happen. This syntax was never part of the standard, and the "ORDER BY
1" syntax it was calqued upon was ripped out in SQL-99.
--
Vik Fearing

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Vik Fearing 2023-10-20 06:20:27 Re: group by true now errors with non-integer constant in GROUP BY
Previous Message Thomas Munro 2023-10-20 05:17:00 Re: BUG #18146: Rows reappearing in Tables after Auto-Vacuum Failure in PostgreSQL on Windows