Thread: 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. +