Re: No exception with concurrent updates

From: Dave Cramer <pg(at)fastcrypt(dot)com>
To: Vladimir Stankovic <V(dot)Stankovic(at)city(dot)ac(dot)uk>
Cc: "pgsql-jdbc(at)postgresql(dot)org" <pgsql-jdbc(at)postgresql(dot)org>
Subject: Re: No exception with concurrent updates
Date: 2004-07-14 18:54:54
Message-ID: 1089831294.1549.31.camel@localhost.localdomain
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-jdbc

Vladimir,

Have you read how concurrency works in postgresql ?

Dave
On Wed, 2004-07-14 at 12:59, Vladimir Stankovic wrote:
> Dear all,
>
> I wrote (extremely) simple programme in Java (jsdk1.4.2) to examine the
> PostgreSQL's (v7.2.4, I know, rather obsolete) handling of concurrent
> updates and I'm confused with the fact that the server (running on a remote
> machine with Red Hat Linux 6.0) does not give me any kind of exception when
> I execute the following code on the client machine running Win 2000. While
> running the programme in the debug mode the excution just hangs when the
> UPDATE query of the transaction2() is executed. Using setQueryTimeout()
> won't help much since it is available as of 7.3 version, isn't it. I set
> autocommit off and specify TRANSACTION_SERIALIZABLE on the Connection
> objects. I'm using the pg73jdbc3.jar and NetBeans 3.5.
>
> /*
> * ConcurencyTest.java
> * Created on 09 July 2004, 15:39
> */
> import java.sql.*;
>
> public class ConcurrencyTest
> {
> Connection con1, con2;
>
> public ConcurrencyTest()
> {
> /*
> ConnectionManager object creates Connection and the
> GetConnection() method returns the reference. Value of
> 128 specifies the JDBC connection (rather than ODBC).
> */
> con1 = new ConnectionManager(128).GetConnection();
> con2 = new ConnectionManager(128).GetConnection();
>
> transaction1();
> transaction2();
>
> try
> {
> con2.commit();
> con1.commit();
> //con1.close();
> //con2.close();
> }
> catch (SQLException sqle)
> {
> System.out.println("Could not close the connection");
> }
>
> }
>
> public void transaction1()
> {
> try
> {
> con1.commit();
> Statement sta1 = con1.createStatement();
> sta1.setQueryTimeout(5);
>
> rs_1 = sta1.executeQuery("SELECT * FROM Orderline WHERE ol_o_id
> = 1 AND ol_d_id = 1 AND ol_w_id = 1 AND ol_number = 4");
>
> while (rs_1.next())
> System.out.println(rs_1.getInt(8) + "\tT1");
> rs_1.close();
>
> sta1.executeUpdate("UPDATE Orderline SET ol_quantity = 10 WHERE
> ol_o_id = 1 AND ol_d_id = 1 AND ol_w_id = 1 AND ol_number = 4");
>
> sta1.close();
> }
> catch (SQLException sqle)
> {
> System.out.println("Error in Transaction 1: " + sqle);
> }
>
> }
>
> public void transaction2()
> {
> try
> {
> con2.commit();
> Statement sta2 = con2.createStatement();
> sta2.setQueryTimeout(5);
>
> ResultSet rs_2 = sta2.executeQuery("SELECT * FROM Orderline
> WHERE ol_o_id = 1 AND ol_d_id = 1 AND ol_w_id = 1 AND ol_number = 4");
> while (rs_2.next())
> System.out.println(rs_2.getInt(8) + "\tT2");
> rs_2.close();
>
>
> sta2.executeUpdate("UPDATE Orderline SET ol_quantity = 20 WHERE
> ol_o_id = 1 AND ol_d_id = 1 AND ol_w_id = 1 AND ol_number = 4");
>
>
> sta2.close();
> }
> catch (SQLException sqle)
> {
> System.out.println("Error in Transaction 2: " + sqle);
>
> }
>
> }
>
> public static void main(String args[])
> {
> new ConcurrencyTest();
> }
> }
>
>
>
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 9: the planner will ignore your desire to choose an index scan if your
> joining column's datatypes do not match
>
>
>
> !DSPAM:40f57e51167398493720393!
>
>
--
Dave Cramer
519 939 0336
ICQ # 14675561

In response to

Browse pgsql-jdbc by date

  From Date Subject
Next Message Vladimir Stankovic 2004-07-14 19:10:16 Re: No exception with concurrent updates
Previous Message Vladimir Stankovic 2004-07-14 16:59:25 No exception with concurrent updates