Thread: Verbosity of column definition mismatch error

Verbosity of column definition mismatch error

From
Brendan Jurd
Date:
Originally posted in psql-general, submitted here as a prospective RFE:

When using a row-returning function (RETURNS SETOF record) in the FROM 
clause of a query, you have to supply a column definition list.  I was 
recently attempting to use a row-returning function in a query and 
received the following error message:

ERROR:  query-specified return row and actual function return row do not 
match

The function in question returned 8 columns, some of which used fairly 
lengthy expressions, and it took me quite a while to track down the 
problem -- it turned out that a column I was expecting to be 'text' was 
actually 'varchar(10)'.  In complex queries, isolating a single type 
mismatch can be something of a chore.

With that in mind, I'd like to submit a request, that the verbosity of 
this error message be increased to explain which ordinal column position 
the error occurred at, and, if possible, the details of the mismatch.  
In my case, a secondary message saying something like "function foo() 
column 4 returned type varchar(10), but column definition specifies type 
text" would have made the debugging process very smooth.

Is this a reasonable suggestion?

Regards
BJ


Re: Verbosity of column definition mismatch error

From
Tom Lane
Date:
Brendan Jurd <blakjak@blakjak.sytes.net> writes:
> ERROR:  query-specified return row and actual function return row do not 
> match

> With that in mind, I'd like to submit a request, that the verbosity of 
> this error message be increased to explain which ordinal column position 
> the error occurred at, and, if possible, the details of the mismatch.  

This is a fairly trivial change, but unfortunately it's too late for
8.0, because we froze error message texts some time ago (for the benefit
of translators).

If you want to start working on a patch for 8.1, look in 
src/backend/executor/nodeFunctionscan.c.  I'd be inclined to forget the
bool return convention for tupledesc_match() and just have it ereport
directly when it sees a problem.  The rowtype matching code in
check_sql_fn_retval (in src/backend/executor/functions.c) would be
useful as a reference.
        regards, tom lane


Re: Verbosity of column definition mismatch error

From
Brendan Jurd
Date:
Tom Lane wrote:

>Brendan Jurd <blakjak@blakjak.sytes.net> writes:
>  
>
>>ERROR:  query-specified return row and actual function return row do not 
>>match
>>    
>>
>
>  
>
>>With that in mind, I'd like to submit a request, that the verbosity of 
>>this error message be increased to explain which ordinal column position 
>>the error occurred at, and, if possible, the details of the mismatch.  
>>    
>>
>
>This is a fairly trivial change, but unfortunately it's too late for
>8.0, because we froze error message texts some time ago (for the benefit
>of translators).
>
>If you want to start working on a patch for 8.1, look in 
>src/backend/executor/nodeFunctionscan.c.  I'd be inclined to forget the
>bool return convention for tupledesc_match() and just have it ereport
>directly when it sees a problem.  The rowtype matching code in
>check_sql_fn_retval (in src/backend/executor/functions.c) would be
>useful as a reference.
>
>            regards, tom lane
>
>---------------------------(end of broadcast)---------------------------
>TIP 4: Don't 'kill -9' the postmaster
>  
>
I'll check it out.  Thanks for the pointers.


Re: Verbosity of column definition mismatch error

From
Tom Lane
Date:
Brendan Jurd <blakjak@blakjak.sytes.net> writes:
> While I was playing around in nodeFunctionscan.c, I noticed what seems 
> to be a minor bug in the latest CVS version.  If you get the column 
> definition wrong in your query, the error displays twice.

Not here.  I think you've got postmaster stderr pointed at your console.
        regards, tom lane