Обсуждение: Checking is TSearch2 query is valid
Is there a way to pass a query to PostgreSQL to check if the
TSeasrch2 search text is valid? For example,
SELECT to_tsquery('default', '!');
returns an error. I want to know if there is a way get true/false
for the '!' portion of the query?
Benjamin
There are two useful functions - numnode() and querytree() More details in http://www.sai.msu.su/~megera/postgres/fts/doc/fts-query.html Oleg On Sat, 8 Sep 2007, Benjamin Arai wrote: > Is there a way to pass a query to PostgreSQL to check if the TSeasrch2 search > text is valid? For example, > > SELECT to_tsquery('default', '!'); > > returns an error. I want to know if there is a way get true/false for the > '!' portion of the query? > > Benjamin > > ---------------------------(end of broadcast)--------------------------- > TIP 1: if posting/reading through Usenet, please send an appropriate > subscribe-nomail command to majordomo@postgresql.org so that your > message can get through to the mailing list cleanly Regards, Oleg _____________________________________________________________ Oleg Bartunov, Research Scientist, Head of AstroNet (www.astronet.ru), Sternberg Astronomical Institute, Moscow University, Russia Internet: oleg@sai.msu.su, http://www.sai.msu.su/~megera/ phone: +007(495)939-16-83, +007(495)939-23-83
That is helpful but these functions to do help me detect errors in queries such as "(moose & frog" where the left parentheses is missing. I may just have to write a lexical analyzer. Benjamin On Sep 8, 2007, at 10:45 PM, Oleg Bartunov wrote: > There are two useful functions - numnode() and querytree() > More details in http://www.sai.msu.su/~megera/postgres/fts/doc/fts- > query.html > > Oleg > On Sat, 8 Sep 2007, Benjamin Arai wrote: > >> Is there a way to pass a query to PostgreSQL to check if the >> TSeasrch2 search text is valid? For example, >> >> SELECT to_tsquery('default', '!'); >> >> returns an error. I want to know if there is a way get true/ >> false for the '!' portion of the query? >> >> Benjamin >> >> ---------------------------(end of >> broadcast)--------------------------- >> TIP 1: if posting/reading through Usenet, please send an appropriate >> subscribe-nomail command to majordomo@postgresql.org so that your >> message can get through to the mailing list cleanly > > Regards, > Oleg > _____________________________________________________________ > Oleg Bartunov, Research Scientist, Head of AstroNet (www.astronet.ru), > Sternberg Astronomical Institute, Moscow University, Russia > Internet: oleg@sai.msu.su, http://www.sai.msu.su/~megera/ > phone: +007(495)939-16-83, +007(495)939-23-83 >
Benjamin Arai <me@benjaminarai.com> writes:
> Is there a way to pass a query to PostgreSQL to check if the
> TSeasrch2 search text is valid? For example,
> SELECT to_tsquery('default', '!');
> returns an error. I want to know if there is a way get true/false
> for the '!' portion of the query?
The generic solution to this type of problem is to write a function that
tries to do whatever-it-is-that-throws-an-error inside a plpgsql
BEGIN/EXCEPTION block, and catch the errors you are expecting.
regards, tom lane
Ok, this appears to have worked but I have to check for exception
code "OTHERS" because I could not figure out what the actual code
being thrown was. Is there a specific exception code for:
ERROR: no operand in tsearch query: "("
Thanks for the help!
Benjamin
On Sep 9, 2007, at 7:54 AM, Tom Lane wrote:
> Benjamin Arai <me@benjaminarai.com> writes:
>> Is there a way to pass a query to PostgreSQL to check if the
>> TSeasrch2 search text is valid? For example,
>> SELECT to_tsquery('default', '!');
>> returns an error. I want to know if there is a way get true/false
>> for the '!' portion of the query?
>
> The generic solution to this type of problem is to write a function
> that
> tries to do whatever-it-is-that-throws-an-error inside a plpgsql
> BEGIN/EXCEPTION block, and catch the errors you are expecting.
>
> regards, tom lane
>
Benjamin Arai <me@benjaminarai.com> writes:
> Is there a specific exception code for:
> ERROR: no operand in tsearch query: "("
regression=# \set VERBOSITY verbose
regression=# select to_tsquery('(');
ERROR: 42601: no operand in tsearch query: "("
LOCATION: gettoken_query, tsquery.c:163
Seems to be "SYNTAX_ERROR".
regards, tom lane
Tom Lane wrote:
> Benjamin Arai <me@benjaminarai.com> writes:
> > Is there a specific exception code for:
> > ERROR: no operand in tsearch query: "("
>
> regression=# \set VERBOSITY verbose
> regression=# select to_tsquery('(');
> ERROR: 42601: no operand in tsearch query: "("
> LOCATION: gettoken_query, tsquery.c:163
>
> Seems to be "SYNTAX_ERROR".
Hmm, maybe we should be displaying the textual name of the SQLSTATE
somehow.
--
Alvaro Herrera http://www.amazon.com/gp/registry/5ZYLFMCVHXC
"El día que dejes de cambiar dejarás de vivir"
Add psql TODO:
o Include the symbolic SQLSTATE name in verbose error reports
http://archives.postgresql.org/pgsql-general/2007-09/msg00438.php
---------------------------------------------------------------------------
Alvaro Herrera wrote:
> Tom Lane wrote:
> > Benjamin Arai <me@benjaminarai.com> writes:
> > > Is there a specific exception code for:
> > > ERROR: no operand in tsearch query: "("
> >
> > regression=# \set VERBOSITY verbose
> > regression=# select to_tsquery('(');
> > ERROR: 42601: no operand in tsearch query: "("
> > LOCATION: gettoken_query, tsquery.c:163
> >
> > Seems to be "SYNTAX_ERROR".
>
> Hmm, maybe we should be displaying the textual name of the SQLSTATE
> somehow.
>
> --
> Alvaro Herrera http://www.amazon.com/gp/registry/5ZYLFMCVHXC
> "El d?a que dejes de cambiar dejar?s de vivir"
>
> ---------------------------(end of broadcast)---------------------------
> TIP 5: don't forget to increase your free space map settings
--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://postgres.enterprisedb.com
+ If your life is a hard drive, Christ can be your backup. +