From: | pginfo <pginfo(at)t1(dot)unisoftbg(dot)com> |
---|---|
To: | Bruno Wolff III <bruno(at)wolff(dot)to> |
Cc: | pgsql-general <pgsql-general(at)postgresql(dot)org> |
Subject: | Re: pg and transactions |
Date: | 2002-12-30 14:54:13 |
Message-ID: | 3E105E15.96E40710@t1.unisoftbg.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
Hi,
Actualy I do not need sequences. It was only a litle example. The real
situation is very complex.
Ok I will try to explain the problem.
I have one simple table tableA (ID int, value float8 ) with one record
(1,1000).
From workstation1 I create jdbc connection ( Connection 1). I do not use
nothing special and use the ps jdbc defaults.
I check the transaction isolation level by calling
MyConnection.getTransactionIsolation().
I receive 2 ( it is TRANSACTION_RED_COMMITED . In oracle I get the same).
From workstation2 I create also jdbc connection (Connection2).
And the test example executes :
Connection1-> begin transaction ( the real command is
MyConnection.setAutoCommit(false) ).
Connection1-> read the record from tableA ( I create statement Statement st
= MyConnection.createStatement();
ResultSet rs = st.executeQuery("select values from tableA where ID = 1;
rs.next();
long myValue = rs.getLong(1)
). It returns 1000.
Connection1-> increase the value to 1001. ( real command in java is myValue
++; )
Connection1-> update the new value in tableA by (st.executeUpdate("update
tableA set value = 1001 where ID = 1");).
Connection2-> begin transaction ( All command for connaction 2 are the same
as for connection 1)
Connection2-> read the record from tableA ( select values from tableA
where ID = 1). It returns 1000. !!!
Connection2-> increase the value with 1. It gives 1001.
Connection2-> update the new value in tableA by update tableA set value
= 1001 where ID = 1.
Connection2->commit.(MyConnection.setAutoCommit(true))
do some other jobs with connection1.
Connection1->commit
Actualy I use the table as a simple counter for unique values and I
expect that Connection2 will wait until Connection1 finish the task.
On oracle the second workstation wait until the end of all the tasks in
workstation1 .
Also as I wrote the both (pg and oracle have the same transaction isolation
level).
My question is : Are pg and pg jdbc supporting correct the transactions and
isolation levels ?
For me it is very important because in the application we nead realy working
transactions.
Also the working application on oracle is running from 2 years without any
problems with data.
I searched for info about how is pg jdbc working, but do not found any
(jdbc.postgresql.org)
I hope some one can help me,
regards
ivan.
Bruno Wolff III wrote:
> On Sat, Dec 28, 2002 at 16:13:17 +0100,
> pginfo <pginfo(at)t1(dot)unisoftbg(dot)com> wrote:
> >
> > Actualy I use the table as a simple counter for unique values and I
> > expect that Connection2 will wait until Connection1 finish the task.
> > Is it normal for pg to work so with transactions?
> > If yes how can I lock all the tables after beginning the transaction?
> > If no where can I make mistake?
>
> If you just want a unique value use sequences. They will be faster.
>
> You didn't provide the exact commands you used in your test. Without
> seeing them it is hard to tell what you might have done wrong.
>
> ---------------------------(end of broadcast)---------------------------
> TIP 1: subscribe and unsubscribe commands go to majordomo(at)postgresql(dot)org
From | Date | Subject | |
---|---|---|---|
Next Message | Barry Lind | 2002-12-30 17:10:24 | Re: Unicode database + JDBC driver performance |
Previous Message | Matthew Nuzum | 2002-12-30 14:15:16 | Re: PHP & PostgreSQL |