Thread: BUG #1251: setTransactionIsolation does not seem to work

BUG #1251: setTransactionIsolation does not seem to work

From
"PostgreSQL Bugs List"
Date:
The following bug has been logged online:

Bug reference:      1251
Logged by:          Fernando Bellas

Email address:      fbellas@udc.es

PostgreSQL version: 7.4.3

Operating system:   Red Hat 7.1

Description:        setTransactionIsolation does not seem to work

Details:

Hi,

First of all, the version I am using of PostgreSQL is 7.4.5, and *not* 7.4.3
(I have set 7.4.3 in the form, since it does not allow to choose 7.4.5).

I have tested several JDBC drivers (pg74.213.jdbc3.jar, pg74.215.jdbc3.jar,
pg74.213.jdbc2.jar and pg74.213.jdbc2ee.jar), and
connection.setTransactionIsolation does not change the transaction isolation
level (maybe the problem is with the database and not with the JDBC driver).

The following code prints "2" (TRANSACTION_READ_COMMITED) as the value of
the transaction isolation levels.

connection.setAutoCommit(false);
int oldTransactionIsolation =
  connection.getTransactionIsolation();
System.out.println("oldTransactionIsolation = " +
     oldTransactionIsolation);
connection.setTransactionIsolation(
    Connection.TRANSACTION_SERIALIZABLE);
System.out.println("newTransactionIsolation = " +
    connection.getTransactionIsolation());

Thanks in advance!
Fernando.

Re: BUG #1251: setTransactionIsolation does not seem to work

From
Kris Jurka
Date:
> Bug reference:      1251
> PostgreSQL version: 7.4.3
> Description:        setTransactionIsolation does not seem to work
>
> First of all, the version I am using of PostgreSQL is 7.4.5, and *not* 7.4.3
> (I have set 7.4.3 in the form, since it does not allow to choose 7.4.5).
>
> I have tested several JDBC drivers (pg74.213.jdbc3.jar, pg74.215.jdbc3.jar,
> pg74.213.jdbc2.jar and pg74.213.jdbc2ee.jar), and
> connection.setTransactionIsolation does not change the transaction isolation
> level (maybe the problem is with the database and not with the JDBC driver).
>
> connection.setAutoCommit(false);
> connection.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);

By calling setAutoCommit(false) you are beginning a transaction and you
may not change the isolation level once a transaction has begun.  You
should move the isolation level calls before the auto commit setting.

The 8.0 driver does not suffer this problem because it does not begin a
transaction immediately upon the auto commit call, but waits for a real
query.  Then when setTransactionIsolation is called it will either work
correctly or issue an error stating that you are in a transaction.  The
8.0 driver can be used against earlier servers if you'd like.

Kris Jurka