Thread: how to get more detailed error messages?

how to get more detailed error messages?

From
Markus Wagner
Date:
Hi,

we have a union query over three select queries with some hundred lines of
SQL code, created as a view.

When executing the code we get an error message "ERROR:  UNION types "text"
and "int4" not matched" with only the line number of the terminating
semicolon included.

This is a problem that we have with many other sql things, too. The line
number of the semicolon is the only thing we know. If we had the line number
of the error itself we could save much time. Alternatively, if we had the
name of the variables (in the case above) or a little quote of the problem
area, we would have much less trouble.

Isn't there a way to get the parser to talk more precisely???

Thank you very much,

Markus Wagner

Re: [SQL] how to get more detailed error messages?

From
Tom Lane
Date:
Markus Wagner <wagner@imsd.uni-mainz.de> writes:
> we have a union query over three select queries with some hundred lines of
> SQL code, created as a view.

> When executing the code we get an error message "ERROR:  UNION types "text"
> and "int4" not matched" with only the line number of the terminating
> semicolon included.

> Isn't there a way to get the parser to talk more precisely???

Not at present.  This sort of error comes from deep inside the parser;
the code is working with a querytree that does not have any direct
connection anymore to source text.  Line numbers are not to be had,
and your suggestion of variable names is rather pointless also, at
least for this example --- there's no guarantee that the expressions
causing the problem involve any variables at all.

I have occasionally toyed with the idea of labeling querytree elements
with back-pointers showing the segment of source text that they came
from, but AFAICT this would impose a nontrivial cost on parsing activity
--- a cost that'd be paid all the time, even on correct queries.  Not
sure if it'd be a net benefit or not.

            regards, tom lane

Re: [SQL] how to get more detailed error messages?

From
Alvaro Herrera
Date:
En Fri, 12 Apr 2002 13:40:06 -0400
Tom Lane <tgl@sss.pgh.pa.us> escribió:

> Markus Wagner <wagner@imsd.uni-mainz.de> writes:

> > When executing the code we get an error message "ERROR:  UNION types "text"
> > and "int4" not matched" with only the line number of the terminating
> > semicolon included.
>
> > Isn't there a way to get the parser to talk more precisely???

[...]

> I have occasionally toyed with the idea of labeling querytree elements
> with back-pointers showing the segment of source text that they came
> from, but AFAICT this would impose a nontrivial cost on parsing activity
> --- a cost that'd be paid all the time, even on correct queries.  Not
> sure if it'd be a net benefit or not.

Is there a way to tell the parser to only include those backpointer on
demand (say, set them to NULL unless explicitly told to do the
backreference)? That way, correct queries do not have to pay the price,
but there is a way to debug a query if one wants to. Say,

DEBUG <sql-stmt>

or something like that (just like EXPLAIN etc).

--
Alvaro Herrera (<alvherre[a]atentus.com>)
"El destino baraja y nosotros jugamos" (A. Schopenhauer)

Re: [SQL] how to get more detailed error messages?

From
Richard Emberson
Date:
When an error occurs in the parser, have the parser inform the top-level
(whatever that is)
and the query is reparsed this time keeping the context information so that a
more
meaningful error message maybe generated.
This has the overhead of setting up the catch block (I guess it would be a
longjmp)
and also the parser would have to check a flag to see if context information
(backpointers)
should be generated - unless you have two versions of the parser ... compile
time flags.

Richard

Tom Lane wrote:

> Markus Wagner <wagner@imsd.uni-mainz.de> writes:
> > we have a union query over three select queries with some hundred lines of
> > SQL code, created as a view.
>
> > When executing the code we get an error message "ERROR:  UNION types "text"
> > and "int4" not matched" with only the line number of the terminating
> > semicolon included.
>
> > Isn't there a way to get the parser to talk more precisely???
>
> Not at present.  This sort of error comes from deep inside the parser;
> the code is working with a querytree that does not have any direct
> connection anymore to source text.  Line numbers are not to be had,
> and your suggestion of variable names is rather pointless also, at
> least for this example --- there's no guarantee that the expressions
> causing the problem involve any variables at all.
>
> I have occasionally toyed with the idea of labeling querytree elements
> with back-pointers showing the segment of source text that they came
> from, but AFAICT this would impose a nontrivial cost on parsing activity
> --- a cost that'd be paid all the time, even on correct queries.  Not
> sure if it'd be a net benefit or not.
>
>                         regards, tom lane
>
> ---------------------------(end of broadcast)---------------------------
> TIP 5: Have you checked our extensive FAQ?
>
> http://www.postgresql.org/users-lounge/docs/faq.html


Re: [SQL] how to get more detailed error messages?

From
"Josh Berkus"
Date:
Tom,

> I have occasionally toyed with the idea of labeling querytree
> elements
> with back-pointers showing the segment of source text that they came
> from, but AFAICT this would impose a nontrivial cost on parsing
> activity
> --- a cost that'd be paid all the time, even on correct queries.  Not
> sure if it'd be a net benefit or not.

I'd suggest it as a compile-time option, if that's feasable.  This is
only a concern, IME, for development machines.  On a production
machine, presumably all of the queries and functions are already
tested.

Thus, if we had the compile-time option of --explicit-query-errors then
it would add this functionality for testers without slowing down
PostgreSQL overall.  Don't know if compile-time options for the parser
are reasonable, though.  Also, I would personally rate this below
several other improvement projects in priority, such as in-database
replication, point-in-time recovery and nested transactions.

-Josh Berkus