Обсуждение: Unexpected behaviour of ORDER BY and LIMIT/OFFSET

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

Unexpected behaviour of ORDER BY and LIMIT/OFFSET

От
Ognjen Blagojevic
Дата:
Hi all,

I'm having a problem with LIMITed queries, and I don't know is it me who
is doing something wrong or Postgres. (Probably me.)

When I browse through the list of employees:

id   id_dept  name
-------------------
1    1        Tom
2    1        Mike
3    2        Meggie
4    2        Marge
5    3        Bart
6    3        Lisa
7    4        Homer

using LIMITed selects like:

   SELECT * FROM employee ORDER BY id_dept LIMIT 3
   SELECT * FROM employee ORDER BY id_dept LIMIT 3 OFFSET 3
   SELECT * FROM employee ORDER BY id_dept LIMIT 3 OFFSET 6

it seems that Meggie is not in the result list on any of the SELECTs.
 From the first query I get Tom, Mike and Marge, and then from the
second Marge, Bart and Lisa.

Is this expected behavior?

My configuration is: CentOS 5.3 and Postgres 8.3.7.

Regards,
Ognjen

Re: Unexpected behaviour of ORDER BY and LIMIT/OFFSET

От
Tom Lane
Дата:
Ognjen Blagojevic <ognjen@etf.bg.ac.yu> writes:
> When I browse through the list of employees:

> id   id_dept  name
> -------------------
> 1    1        Tom
> 2    1        Mike
> 3    2        Meggie
> 4    2        Marge
> 5    3        Bart
> 6    3        Lisa
> 7    4        Homer

> using LIMITed selects like:

>    SELECT * FROM employee ORDER BY id_dept LIMIT 3
>    SELECT * FROM employee ORDER BY id_dept LIMIT 3 OFFSET 3
>    SELECT * FROM employee ORDER BY id_dept LIMIT 3 OFFSET 6

> it seems that Meggie is not in the result list on any of the SELECTs.

"ORDER BY id_dept" isn't a unique sort key.  In this example the
implementation is free to return Meggie and Marge in either order,
and the ordering can indeed vary depending on the LIMIT/OFFSET values.

Moral: don't use LIMIT/OFFSET without a fully specified sort order.

            regards, tom lane

Re: Unexpected behaviour of ORDER BY and LIMIT/OFFSET

От
Ognjen Blagojevic
Дата:
Tom Lane wrote:
> "ORDER BY id_dept" isn't a unique sort key.  In this example the
> implementation is free to return Meggie and Marge in either order,
> and the ordering can indeed vary depending on the LIMIT/OFFSET values.
>
> Moral: don't use LIMIT/OFFSET without a fully specified sort order.

Thank you, Tom, for your prompt response.

Regards,
Ognjen