Обсуждение: BUG #17176: Error raised on valid query

Поиск
Список
Период
Сортировка

BUG #17176: Error raised on valid query

От
PG Bug reporting form
Дата:
The following bug has been logged on the website:

Bug reference:      17176
Logged by:          Peter Davie
Email address:      peter.davie@convergentsolutions.com.au
PostgreSQL version: 13.4
Operating system:   Windows 10 64-bit
Description:

Hibernate is generating the following query:
select distinct date_part('year', internalme0_.when_occurred) as col_0_0_,
date_part('month', internalme0_.when_occurred) as col_1_0_, date_part('day',
internalme0_.when_occurred) as col_2_0_, date_part('hour',
internalme0_.when_occurred) as col_3_0_, date_part('minute',
internalme0_.when_occurred) as col_4_0_ 
from InternalMessages internalme0_ 
group by date_part('year', internalme0_.when_occurred) , date_part('month',
internalme0_.when_occurred) , date_part('day', internalme0_.when_occurred) ,
date_part('hour', internalme0_.when_occurred) , date_part('minute',
internalme0_.when_occurred) , internalme0_.when_occurred 
order by date_part($1, internalme0_.when_occurred) asc, date_part($2,
internalme0_.when_occurred) asc, date_part($3, internalme0_.when_occurred)
asc, date_part($4, internalme0_.when_occurred) asc, date_part($5,
internalme0_.when_occurred) asc

The placeholders contain the values 'year', 'month', 'day', 'hour' and
'minute'.

The following error is generated when the query is executed:
ERROR:  for SELECT DISTINCT, ORDER BY expressions must appear in select list
at character 635

The Order By and Group By clauses are semantically equivalent.

I am in the process of raising a bug with the Hibernate team to correct the
generation of the query, however this query should be accepted.


Re: BUG #17176: Error raised on valid query

От
Tom Lane
Дата:
PG Bug reporting form <noreply@postgresql.org> writes:
> Hibernate is generating the following query:

> select distinct date_part('year', internalme0_.when_occurred) as col_0_0_,
> date_part('month', internalme0_.when_occurred) as col_1_0_, date_part('day',
> internalme0_.when_occurred) as col_2_0_, date_part('hour',
> internalme0_.when_occurred) as col_3_0_, date_part('minute',
> internalme0_.when_occurred) as col_4_0_ 
> from InternalMessages internalme0_ 
> group by date_part('year', internalme0_.when_occurred) , date_part('month',
> internalme0_.when_occurred) , date_part('day', internalme0_.when_occurred) ,
> date_part('hour', internalme0_.when_occurred) , date_part('minute',
> internalme0_.when_occurred) , internalme0_.when_occurred 
> order by date_part($1, internalme0_.when_occurred) asc, date_part($2,
> internalme0_.when_occurred) asc, date_part($3, internalme0_.when_occurred)
> asc, date_part($4, internalme0_.when_occurred) asc, date_part($5,
> internalme0_.when_occurred) asc

> The placeholders contain the values 'year', 'month', 'day', 'hour' and
> 'minute'.

Doesn't matter.  Those expressions are not semantically equivalent,
and your assertion of that doesn't make it so.  The query has to be
valid for any values of the placeholders.

(If you'd like to substitute specific parameter values in advance of
semantic analysis, then do it on the client side.)

            regards, tom lane