Re: BUG #4216: Index scan goes wrong with crosstype comparison and between in one statement
От | Tom Lane |
---|---|
Тема | Re: BUG #4216: Index scan goes wrong with crosstype comparison and between in one statement |
Дата | |
Msg-id | 16631.1212250035@sss.pgh.pa.us обсуждение исходный текст |
Ответ на | BUG #4216: Index scan goes wrong with crosstype comparison and between in one statement ("Sokolov Yura aka "funny_falcon"" <funny.falcon@gmail.com>) |
Список | pgsql-bugs |
"Sokolov Yura aka "funny_falcon"" <funny.falcon@gmail.com> writes: > I've created a new type - time_interval, define operators on it and > timestamp, add those operators into OPERATOR FAMILY datetime_ops USING > btree; > When I query a table using BETWEEN and equality timestamp = time_interval > (which means timestamp included in time_interval) then statement gives > strange results. I think your operator class is broken. You can't just invent some randomly-defined operators that work sort of like a normal scalar ordering and then expect btree indexes to work. In particular, this set of operators violates the transitive law when taken together with regular timestamp equality: for two timestamps T1 and T2 and some interval TI, we can have T1 = TI and T2 = TI from which it should follow that T1 = T2, yet that does not follow. But by putting this notion of "equality" into the same opfamily as timestamp equality, you are promising the system that it *does* follow. I didn't bother digging through the code to see exactly where that assumption comes into play, but that's basically what's biting you. regards, tom lane
В списке pgsql-bugs по дате отправления: