Re: Transaction atomicity
От | Giuseppe Sacco |
---|---|
Тема | Re: Transaction atomicity |
Дата | |
Msg-id | 1173280119.20645.39.camel@scarafaggio обсуждение исходный текст |
Ответ на | Re: Transaction atomicity (Dave Cramer <pg@fastcrypt.com>) |
Ответы |
Re: Transaction atomicity
|
Список | pgsql-jdbc |
Hi Dave, Il giorno mer, 07/03/2007 alle 07.15 -0500, Dave Cramer ha scritto: > 1) What you are observing is quite normal for postgresql. It use MVCC > so it's quite possible for every connection to see the same value for > max (seNR). > which leads us to 2 Thank you very much. I just read the documentation about MVCC and I understand why my code didn't work. > 2) Don't use max() for this. If you have to use max then you have to > lock the record before doing the insert which will slow everyone > down. Postgresql provides you with sequences for exactly this > purpose. Use nextval('sequence_name') to increment it and currval > ('sequence_name') to get the value that your connection just used. Thanks for this suggestion. I have been evaluating the use of sequences in my application, but I was looking for a more portable code (this code have to run on postgresq 8.1, mysql 5, oracle 9.2 and sql-server 2005). As you may know postgresql nextval syntax isn't as required by the standard; and other vendors use different syntax too. Moreover it would make my code really complex since I would need a new sequence for any connected user. So, before starting using sequences, I will try to loop my original INSERT statement in order to see how long is the average looping. Probably if this is less than 4 iterations, then I will go this way. Again, thank you for your help, Giuseppe
В списке pgsql-jdbc по дате отправления: