Thread: Re: Query inside transaction

Re: Query inside transaction

From
Michal Táborský
Date:
NMB Webmaster wrote:

> But if someone else runs the same transaction in the same time what
 > value does "currval('sequence')" return? That one of the first
 > transaction or that one of the other transaction? Moreover, field
 > id is a unique primary key, it does not accept duplicates.

That's the beauty of sequences. They are transaction-safe. Co
"currval('sequence')" will always return the same value of the previous
nextval call within that transaction, no matter how many other
transactions picked the numbers in between.

To demonstrate:

Transaction 1                              Transaction 2
BEGIN;                    --
nextval('seq') = 1            BEGIN;
do something..                nextval('seq') = 2
do something else...            COMMIT;
currval('seq') = 1
COMMIT;

--
Michal Taborsky
http://www.taborsky.cz