Обсуждение: ERROR: syntax error in tsquery - for high-unicode whitespace
hi
it was tested on 9.1 and 9.3. Interestingly - it worked without error in
8.2.
$ select to_tsquery('english', E'a\xe2\x80\x86a');
ERROR: syntax error in tsquery: "aâa"
the 3-byte utf8 character is SIX-PER-EM SPACE (based on info from
http://www.fileformat.info/info/unicode/char/2006/index.htm)
Not sure what should happen with it, but generally I thought that
whitespace characters will get ignored (treated as separators) when
building tsquery.
It seems to work that way when building tsvector though:
$ select to_tsvector('english', E'a\xe2\x80\x86a');
to_tsvector
-------------
(1 row)
and for larger example:
$ select to_tsvector('english', E'depesz\xe2\x80\x86whatever');
to_tsvector
-----------------------
'depesz':1 'whatev':2
(1 row)
$ select to_tsquery('english', E'depesz\xe2\x80\x86whatever');
ERROR: syntax error in tsquery: "depeszâwhatever"
Best regards,
depesz
--
The best thing about modern society is how easy it is to avoid contact with it.
http://depesz.com/
hubert depesz lubaczewski <depesz@depesz.com> writes:
> $ select to_tsquery('english', E'a\xe2\x80\x86a');
> ERROR: syntax error in tsquery: "aâa"
> the 3-byte utf8 character is SIX-PER-EM SPACE (based on info from
> http://www.fileformat.info/info/unicode/char/2006/index.htm)
AFAICS, that behavior is correct, if you're using a locale that reports
â as being whitespace. Compare
u8e=# select to_tsquery('english', E'a a');
ERROR: syntax error in tsquery: "a a"
You need an ampersand or something in there.
Or use plainto_tsquery().
regards, tom lane
On Thu, Mar 14, 2013 at 11:56:19PM -0400, Tom Lane wrote:
> hubert depesz lubaczewski <depesz@depesz.com> writes:
> > $ select to_tsquery('english', E'a\xe2\x80\x86a');
> > ERROR: syntax error in tsquery: "aâa"
>
> > the 3-byte utf8 character is SIX-PER-EM SPACE (based on info from
> > http://www.fileformat.info/info/unicode/char/2006/index.htm)
>
> AFAICS, that behavior is correct, if you're using a locale that reports
> â as being whitespace. Compare
>
> u8e=# select to_tsquery('english', E'a a');
> ERROR: syntax error in tsquery: "a a"
>
> You need an ampersand or something in there.
> Or use plainto_tsquery().
Right. Thanks. Not sure how I missed that.
Best regards,
depesz
--
The best thing about modern society is how easy it is to avoid contact with it.
http://depesz.com/