Re: Question about sorting internals

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: Question about sorting internals
Дата
Msg-id 15974.1386775807@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Question about sorting internals  (hubert depesz lubaczewski <depesz@depesz.com>)
Список pgsql-hackers
hubert depesz lubaczewski <depesz@depesz.com> writes:
> There are two simple queries: ...
> They differ only in order of queries in union all part.
> The thing is that they return the same result. Why isn't one of them returning
> "2005" for 6th "miesiac"?

With such a small amount of data, you're getting an in-memory quicksort,
and a well-known property of quicksort is that it isn't stable --- that
is, there are no guarantees about the order in which it will return items
that have equal keys.  In this case it's evidently making different
partitioning choices, as a consequence of the different arrival order of
the rows, that just by chance end up with the 6/2004/6 row being returned
before the 6/2005/6 row in both cases.  You could trace through the logic
and see exactly how that's happening, but I doubt it'd be a very edifying
exercise.

If you want to get well-defined results with DISTINCT ON, you should
make the ORDER BY sort by a candidate key.  Anything less opens you to
uncertainty about which rows the DISTINCT will select.
        regards, tom lane



В списке pgsql-hackers по дате отправления:

Предыдущее
От: "MauMau"
Дата:
Сообщение: Re: [RFC] Shouldn't we remove annoying FATAL messages from server log?
Следующее
От: Andres Freund
Дата:
Сообщение: Re: Replication Node Identifiers and crashsafe Apply