Re: JDBC gripe list (the autocommit subthread) - Mailing list pgsql-jdbc

From Kevin Grittner
Subject Re: JDBC gripe list (the autocommit subthread)
Date
Msg-id 4D92FE2E020000250003BF70@gw.wicourts.gov
Whole thread Raw
In response to Re: JDBC gripe list (the autocommit subthread)  (Quartz <quartz12h@yahoo.com>)
Responses Re: JDBC gripe list (the autocommit subthread)
Re: JDBC gripe list (the autocommit subthread)
List pgsql-jdbc
Quartz <quartz12h@yahoo.com> wrote:

> If addBatch was not meant to be called when autocommit=true, then
> it would have thrown an exception. The point is to enable multiple
> statement in 1 executeBatch call. Just imagine a system that
> separates who makes statements and who executes them. Like event
> logging lets say. Meanwhile, there are infinite cases where
> multiple statements are not (and must not) be in a all-or-nothing
> transaction. This is why applications choose to set
> autocommit=true to obtain the batch behavior without a TX. It's in
> the API for such reasons.

The docs say something completely at odds with your assertion:

| a JDBC driver may or may not continue to process the remaining
| commands in the batch. However, the driver's behavior must be
| consistent with a particular DBMS, either always continuing to
| process commands or never continuing to process commands.

> It is just incorrect to consider the batch is 1 transaction when
> the API clearly exposes the ability to avoid it.

And the option not to.

> As I wrote earlier, calling applications that just pile up updates
> in a batch not expecting any deadlock due to row locking by each
> statement, will not work anymore.

Anymore?  When did batches in PostgreSQL work that way?

> The fact the API have autocommit independant from batches means it
> serve a purpose. I see it. But even if I didn't, the API says so
> and I can't second guess it.

You are misreading it.

> I know it hurts to learn such truth after such a long delay.
> You'll get over it!

That's not the way to persuade people.  You're approaching the point
where people will just start ignoring your posts as noise.

The bottom line is that there is a perfectly clean and portable way
to run the statements such that you can ignore or retry failures --
execute each separately in your Java code.  That you chose to use an
API which allows but doesn't require a driver to support the
behavior you want doesn't make the behavior mandatory.  Most people
use the batch feature for performance, and in PostgreSQL it would
reduce the performance of the batch feature to accommodate what you
propose.

> I have found a 4 year old bug lately, in my own code. I know the
> feeling.

It would appear that you've found but not yet recognized another bug
-- inappropriate use of an API.  You're counting on an
implementation detail rather than the documented API, and that's a
bug.

-Kevin

pgsql-jdbc by date:

Previous
From: Quartz
Date:
Subject: Re: JDBC gripe list
Next
From: Dave Cramer
Date:
Subject: Re: JDBC gripe list (the autocommit subthread)