Re: BUG #7865: Unexpected error code on insert of duplicate to composite primary key

From: Matti Aarnio <matti(dot)aarnio(at)methics(dot)fi>
To: Heikki Linnakangas <hlinnakangas(at)vmware(dot)com>
Cc: pgsql-bugs(at)postgresql(dot)org
Subject: Re: BUG #7865: Unexpected error code on insert of duplicate to composite primary key
Date: 2013-02-12 00:04:43
Message-ID: 5119871B.6040506@methics.fi
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

On 02/11/2013 07:52 PM, Heikki Linnakangas wrote:
> On 11.02.2013 17:34, Matti Aarnio wrote:
>> } catch (SQLException e) {
>> int code = e.getErrorCode();
>> if (code == 20000 // Derby
>> || code == 23505) {// PostgreSQL, Oracle, ...
>> System.out.println("Expected SQL duplicate insert indication
>> status code: "+code)
>> } else {
>> System.out.println("Insert into example at "+this.jdbcUrl+
>> " resulted unexpected SQL Exception code: "+
>> code + " " + e.getMessage());
>> }
>
> Hmm, looking at the PSQLException source code, I don't think the driver has ever set the vendor-specific error code that getErrorCode() returns. I tested the snippet you posted with server 8,4 and 9.2, and with jdbc driver 8.4 and 8.2, and saw no difference; getErrorCode() always returned 0.
>
> You should be using getSQLState() instead. The "23505" sqlstate is defined by the SQL standard, so if the other DBMS' you're supporting follow the spec on that, you won't even need any vendor-specific code there.

Indeed..
Going over my codebase I see that this was the only one where the getErrorCode() was used in place of getSQLState().
It worked just fine, but was noisy in the logs, thus this bugreport.

[x] User error.

> - Heikki

BR, Matti Aarnio

In response to

Browse pgsql-bugs by date

  From Date Subject
Next Message Tom Lane 2013-02-12 00:44:51 Re: BUG #7867: Similarity function fails
Previous Message Heikki Linnakangas 2013-02-11 17:52:57 Re: BUG #7865: Unexpected error code on insert of duplicate to composite primary key