Обсуждение: Strange behavior on to_tsquery()
Hello PG hackers,<br /><br />I created a <b>custom dictionary</b> (based on dict_int) and a search configuration and a
strangebehavior happens on <b>PostgreSQL 8.4.9</b>.<br /><br />When I invoke the following instruction several
times,<b>to_tsquery()</b> returns distinct results:<br /><br /><span style="font-family: courier
new,monospace;">catalog=>SELECT to_tsquery('custom', 'pi');</span><br style="font-family: courier new,monospace;"
/><spanstyle="font-family: courier new,monospace;"> to_tsquery </span><br style="font-family: courier new,monospace;"
/><spanstyle="font-family: courier new,monospace;">------------</span><br style="font-family: courier new,monospace;"
/><spanstyle="font-family: courier new,monospace;"> 'pi':*</span><br style="font-family: courier new,monospace;"
/><spanstyle="font-family: courier new,monospace;">(1 registro)</span><br style="font-family: courier new,monospace;"
/><brstyle="font-family: courier new,monospace;" /><span style="font-family: courier new,monospace;">catalog=>
SELECTto_tsquery('custom', 'pi');</span><br style="font-family: courier new,monospace;" /><span style="font-family:
couriernew,monospace;"> to_tsquery </span><br style="font-family: courier new,monospace;" /><span style="font-family:
couriernew,monospace;">------------</span><br style="font-family: courier new,monospace;" /><span style="font-family:
couriernew,monospace;"> 'pi'</span><br style="font-family: courier new,monospace;" /><span style="font-family: courier
new,monospace;">(1registro)</span><br /><br />Therefore, when I use <b>@@ operator</b> over a <b>tsvector</b> column in
mytable the result set is not always the same.<br /><br />1) Do you have any clue on what could be happening and how to
solvethis issue, please?<br /><br />2) Sometimes the value returned by <b>to_tsquery()</b> has a ":*" suffix. What does
thatmean?<br /><br />Thanks in advance.<br /><br />Best Regards,<br /><br />-- <br />Rodrigo Hjort<br /><a
href="http://www.hjort.co"target="_blank">www.hjort.co</a><br /><br />
Rodrigo Hjort <rodrigo.hjort@gmail.com> writes:
> I created a *custom dictionary* (based on dict_int) and a search
> configuration and a strange behavior happens on *PostgreSQL 8.4.9*.
> ...
> Therefore, when I use *@@ operator* over a *tsvector* column in my table
> the result set is not always the same.
This almost certainly means a bug in your dictionary code.
> 2) Sometimes the value returned by *to_tsquery()* has a ":*" suffix. What
> does that mean?
Prefix search request. Possibly you're forgetting to zero out the
prefix flag?
(Just offhand, it rather looks like dict_int and dict_xsyn are both
assuming that palloc will give back zeroed space, which is bogus...)
regards, tom lane
I wrote: > (Just offhand, it rather looks like dict_int and dict_xsyn are both > assuming that palloc will give back zeroed space, which is bogus...) Yeah, this is definitely broken. Patches committed; thanks for the report. http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=e3e3087d8717c26cd1c4581ba29274ac214eb816 regards, tom lane
2011/11/3 Tom Lane
I wrote:Yeah, this is definitely broken. Patches committed; thanks for the
> (Just offhand, it rather looks like dict_int and dict_xsyn are both
> assuming that palloc will give back zeroed space, which is bogus...)
report.
http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=e3e3087d8717c26cd1c4581ba29274ac214eb816
regards, tom lane
I modified my code by calling palloc0() instead and that issue no longer appears. :D
Thanks, Tom Lane!
--
Rodrigo Hjort
www.hjort.co