Re: Reverse order sort in multi-column indexes

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: Reverse order sort in multi-column indexes
Дата
Msg-id 19194.1130794780@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Reverse order sort in multi-column indexes  (Eric Faulhaber <ecf@goldencode.com>)
Список pgsql-novice
Eric Faulhaber <ecf@goldencode.com> writes:
> What I'm having trouble understanding is the bit about the new
> comparison function:

> 1a)  If we've already "reversed" the operators' meanings as described
> above by reassigning them to different strategy numbers, why is it also
> necessary to define a new comparison function?

Because the comparison function has to agree with the semantics of the
operators: for instance it has to return a negative value exactly when
operator 1 would return "true".

> 1b)  I suppose the converse question is:  if we provide a new comparison
> function which implements the reverse comparison strategy, why is it
> necessary to re-assign all the operators to different strategy numbers?

Because the same operators serve different roles.  In a normal opclass
"A < B" indicates whether A comes before B in the index ordering, but for
a reverse opclass you'd need "A > B" to mean that.  So you need to
assign ">" not "<" to be operator 1.

BTW, there is a gotcha that probably prevents this idea from working
really nicely in existing PG releases, namely that NULLs will still sort
to the end in both kinds of opclass.  Aside from creating inconsistencies
between index-scan and explicit-sort results, that's quite likely to
break merge joins.  I've been thinking about how to fix this, and may be
able to do something about it in 8.2.  In the meantime, I'd recommend
against using a reverse-sort opclass unless you can mark the column NOT
NULL.

            regards, tom lane

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

Предыдущее
От: Eric Faulhaber
Дата:
Сообщение: Reverse order sort in multi-column indexes
Следующее
От: "Reinhard Hnat"
Дата:
Сообщение: Update Rule