Well, I'm a relative newbie to SQL, but I have been told that this behaviour is a bug. I hope I didn't misunderstand something.
To reproduce, first create a table 'counters' that looks like that: counter1 ---------- 0 (1 row) Then execute the following commands parallelly on two psql terminals: set transaction isolation level serializable; begin; update counters set counter1=(select counter1+1 from counters); (The second psql terminal will not return from executing the last statement) Commit on both terminals, then do a select again. The result will be: counter1 ---------- 1 (1 row) Oops! ;-) If instead I use an update statement like that: update counters set counter1=counter1+1; psql behaves like expected, i.E. the result is 2. -- Grüße, Nico ---------------------------(end of broadcast)--------------------------- TIP 5: Have you checked our extensive FAQ? http://www.postgresql.org/users-lounge/docs/faq.html