Thread: Portable interpretation of jdbc SQLException for SERIALIZABLE transaction restart?

I'm getting the following expected exception:

java.sql.SQLException: ERROR:  Can't serialize access due to concurrent update

    at org.postgresql.core.QueryExecutor.execute(QueryExecutor.java:131)
    at org.postgresql.jdbc1.AbstractJdbc1Connection.ExecSQL(AbstractJdbc1Connection.java:505)
    at org.postgresql.jdbc1.AbstractJdbc1Statement.execute(AbstractJdbc1Statement.java:320)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:48)
    at org.postgresql.jdbc1.AbstractJdbc1Statement.executeUpdate(AbstractJdbc1Statement.java:197)
    at org.postgresql.jdbc1.AbstractJdbc1Statement.executeUpdate(AbstractJdbc1Statement.java:183)
    at DbMutex.updateRow(DbMutex.java:70)
    at DbMutex.run(DbMutex.java:38)

So I know I need to restart my transaction.  What I don't know
is how to portably interpret this particular SQLException instance as one
that justifies a transaction restart, as opposed to the myriad other types of SQLExceptions I might get.

So two questions:

1) How do I know this is an exception indicative of the need for a transaction restart in PostgreSQL?
2) How do I do this portably? (I.e. in a database neutral fashion).

The Sun spec on SQLException talks about XOPEN SQLstate interpretation,
I'm still looking for documentation on that puppy.  It also talks about SQL99.
At this point I'm unsure which applies to this exception for postgresql.

I'm using PostgreSQL 7.3.3 and Java 1.4.2 on linux, though hopefully none of that
makes a difference.

Thanks for any tips.

Re: Portable interpretation of jdbc SQLException for SERIALIZABLE

From
Dave Tenny
Date:
FYI, additional testing with the software revs indicated below
reveals that the SQLException SQLState is null, and the vendor specific
error code is zero.
That seems to leave me stuck with interpreting the exception string
content (ugh!)
unless someone has additional information.

Dave Tenny wrote:

> I'm getting the following /expected/ exception:
>
> java.sql.SQLException: ERROR:  Can't serialize access due to
> concurrent update
>
>    at org.postgresql.core.QueryExecutor.execute(QueryExecutor.java:131)
>    at
> org.postgresql.jdbc1.AbstractJdbc1Connection.ExecSQL(AbstractJdbc1Connection.java:505)
>
>    at
> org.postgresql.jdbc1.AbstractJdbc1Statement.execute(AbstractJdbc1Statement.java:320)
>
>    at
> org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:48)
>
>    at
> org.postgresql.jdbc1.AbstractJdbc1Statement.executeUpdate(AbstractJdbc1Statement.java:197)
>
>    at
> org.postgresql.jdbc1.AbstractJdbc1Statement.executeUpdate(AbstractJdbc1Statement.java:183)
>
>    at DbMutex.updateRow(DbMutex.java:70)
>    at DbMutex.run(DbMutex.java:38)
>
> So I know I need to restart my transaction.  What I don't know
> is how to portably interpret this particular SQLException instance as one
> that justifies a transaction restart, as opposed to the myriad other
> types of SQLExceptions I might get.
>
> So two questions:
>
> 1) How do I know this is an exception indicative of the need for a
> transaction restart in PostgreSQL?
> 2) How do I do this portably? (I.e. in a database neutral fashion).
>
> The Sun spec on SQLException talks about XOPEN SQLstate interpretation,
> I'm still looking for documentation on that puppy.  It also talks
> about SQL99.
> At this point I'm unsure which applies to this exception for postgresql.
>
> I'm using PostgreSQL 7.3.3 and Java 1.4.2 on linux, though hopefully
> none of that
> makes a difference.
>
> Thanks for any tips.
>


Re: Portable interpretation of jdbc SQLException for SERIALIZABLE

From
Barry Lind
Date:
Dave,

If you use the 7.4 driver and database you will get real SQLState codes.
  That is new functionality in 7.4.

--Barry

Dave Tenny wrote:
> FYI, additional testing with the software revs indicated below
> reveals that the SQLException SQLState is null, and the vendor specific
> error code is zero.
> That seems to leave me stuck with interpreting the exception string
> content (ugh!)
> unless someone has additional information.
>
> Dave Tenny wrote:
>
>> I'm getting the following /expected/ exception:
>>
>> java.sql.SQLException: ERROR:  Can't serialize access due to
>> concurrent update
>>
>>    at org.postgresql.core.QueryExecutor.execute(QueryExecutor.java:131)
>>    at
>> org.postgresql.jdbc1.AbstractJdbc1Connection.ExecSQL(AbstractJdbc1Connection.java:505)
>>
>>    at
>> org.postgresql.jdbc1.AbstractJdbc1Statement.execute(AbstractJdbc1Statement.java:320)
>>
>>    at
>> org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:48)
>>
>>    at
>> org.postgresql.jdbc1.AbstractJdbc1Statement.executeUpdate(AbstractJdbc1Statement.java:197)
>>
>>    at
>> org.postgresql.jdbc1.AbstractJdbc1Statement.executeUpdate(AbstractJdbc1Statement.java:183)
>>
>>    at DbMutex.updateRow(DbMutex.java:70)
>>    at DbMutex.run(DbMutex.java:38)
>>
>> So I know I need to restart my transaction.  What I don't know
>> is how to portably interpret this particular SQLException instance as one
>> that justifies a transaction restart, as opposed to the myriad other
>> types of SQLExceptions I might get.
>>
>> So two questions:
>>
>> 1) How do I know this is an exception indicative of the need for a
>> transaction restart in PostgreSQL?
>> 2) How do I do this portably? (I.e. in a database neutral fashion).
>>
>> The Sun spec on SQLException talks about XOPEN SQLstate interpretation,
>> I'm still looking for documentation on that puppy.  It also talks
>> about SQL99.
>> At this point I'm unsure which applies to this exception for postgresql.
>>
>> I'm using PostgreSQL 7.3.3 and Java 1.4.2 on linux, though hopefully
>> none of that
>> makes a difference.
>>
>> Thanks for any tips.
>>
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org
>