Re: How to determine offending column for insert exceptions - Mailing list pgsql-sql

From Adrian Klaver
Subject Re: How to determine offending column for insert exceptions
Date
Msg-id 5536917D.1020106@aklaver.com
Whole thread Raw
In response to Re: How to determine offending column for insert exceptions  (Shawn Gennaria <sgennaria2@gmail.com>)
List pgsql-sql
On 04/21/2015 10:54 AM, Shawn Gennaria wrote:
> David,
>
> Thanks for the insight.  Indeed, I could not replicate Adrian's error
> message by substituting his date example in my code.  It just gives me a
> generic 'cannot cast type date to integer' with no mention of a column
> name.  I think I better understand how the context affects the ability
> to provide certain information in error messages.

DO
$$
DECLARE    text_var1 text;    text_var2 text;    text_var3 text;
BEGIN  insert into int_test values (1, 'test', '2015-04-21'::date);  EXCEPTION WHEN OTHERS THEN    GET STACKED
DIAGNOSTICStext_var1 = MESSAGE_TEXT,                          text_var2 = PG_EXCEPTION_DETAIL,
text_var3= PG_EXCEPTION_HINT;    RAISE NOTICE '%, %, %', text_var1, text_var2, text_var3;
 
END$$;


postgres@test=# \e
NOTICE:  column "test_col" is of type integer but expression is of type 
date, , You will need to rewrite or cast the expression.
DO

>
> I'll attempt to solve my problem by querying pg_attribute for the
> columns of the table I'm dealing with and then I'll just loop over them
> all until I get a hit on the value returned in my error message.  It
> won't be pretty, but it's better than browsing thousands of columns in
> CSVs trying to find these pitfalls.
>
> Thank you all for the assist!
>
>
> On Tue, Apr 21, 2015 at 1:04 PM, David G. Johnston
> <david.g.johnston@gmail.com <mailto:david.g.johnston@gmail.com>> wrote:
>
>     On Tue, Apr 21, 2015 at 9:48 AM, Shawn Gennaria
>     <sgennaria2@gmail.com <mailto:sgennaria2@gmail.com>>wrote:
>
>         Glad to hear it's here just in time.  I am using 9.4, though, so
>         I wish I could figure out why it's returning NULL when I use
>         it.  And the error message string doesn't contain any column
>         name to parse in my output.
>
>         On Tue, Apr 21, 2015 at 12:46 PM, Alvaro Herrera
>         <alvherre@2ndquadrant.com <mailto:alvherre@2ndquadrant.com>> wrote:
>
>             Shawn Gennaria wrote:
>             > OK, I'm looking at
>
>www.postgresql.org/docs/9.4/interactive/plpgsql-control-structures.html#PLPGSQL-EXCEPTION-DIAGNOSTICS-VALUES
>
<http://www.postgresql.org/docs/9.4/interactive/plpgsql-control-structures.html#PLPGSQL-EXCEPTION-DIAGNOSTICS-VALUES>
>             > which I completely missed before.  This sounds like my answer, but it's not
>             > returning anything when I try to extract the COLUMN_NAME.
>
>             As far as I recall, COLUMN_NAME is new in 9.4.  If you're
>             trying with an
>             earlier version, you can't get that info other than by
>             parsing the error
>             message string.
>
>
>     ​Adrian provided an example of trying to place a valid date into a
>     non-date column.  The data itself was correct but the place it is
>     being stored to is invalid and can be reported explicitly.
>
>     Shawn provided an example of trying to create an integer using an
>     invalid value.  Type input errors are not column specific and so the
>     error - which is basically a parse error - does not provide column
>     information.
>
>     There is likely some more experimenting here, and maybe room to
>     attached optional contextual markers to make better error messages,
>     but fundamentally these are two different kinds of errors which
>     cannot be generalized over to the extent of saying "errors should
>     provide column name information"...because what would you do for {
>     SELECT 'a'::int }?
>
>     David J.
>
>


-- 
Adrian Klaver
adrian.klaver@aklaver.com



pgsql-sql by date:

Previous
From: Adrian Klaver
Date:
Subject: Re: How to determine offending column for insert exceptions
Next
From: Weston Weems
Date:
Subject: Question regarding querying some JSON/JSONB