Re: Index usage for tstzrange?
От | Heikki Linnakangas |
---|---|
Тема | Re: Index usage for tstzrange? |
Дата | |
Msg-id | 514ACA5A.2080401@vmware.com обсуждение исходный текст |
Ответ на | Re: Index usage for tstzrange? (Vasilis Ventirozos <v.ventirozos@gmail.com>) |
Список | pgsql-performance |
On 21.03.2013 06:07, Vasilis Ventirozos wrote: > On Thu, Mar 21, 2013 at 5:58 AM, Tom Lane<tgl@sss.pgh.pa.us> wrote: >> What I find more disturbing is that this is what I get from the example >> in HEAD: >> >> regression=# explain SELECT * FROM a WHERE ts<@ >> tstzrange('2013-01-01','2013-01-01 00:10:00'); >> ERROR: XX000: type 1184 is not a range type >> LOCATION: range_get_typcache, rangetypes.c:1451 >> >> Haven't traced through it to determine exactly what's happening, but >> isn't this a legitimate usage? And if it isn't, surely a more >> user-facing error ought to be getting thrown somewhere upstream of here. > > It is a legit usage, this is from a test i did myself (9.2.3) > > test=# explain SELECT * FROM a WHERE ts<@ > tstzrange('2013-01-01','2013-04-01 00:10:00'); > QUERY PLAN > ------------------------------------------------------------------------------------ > Seq Scan on a (cost=0.00..23.75 rows=1 width=44) > Filter: (ts<@ '["2013-01-01 00:00:00+02","2013-04-01 > 00:10:00+03")'::tstzrange) Looks like the range type cost estimation patch broke this, back in August already. The case of var <@ constant, where constant is a range and var is an element, that's broken. The cost estimation function, rangesel(), incorrectly assumes that the 'var' is always a range type. It's a bit worrying that no-one noticed until now. I'll add a test for that operator to the rangetypes regression test. The immediate fix is attached, but this made me realize that rangesel() is still missing estimation for the "element <@ range" operator. It shouldn't be hard to implement, I'm pretty sure we have all the statistics we need for that. - Heikki
Вложения
В списке pgsql-performance по дате отправления: