Re: getting back autonumber just inserted - Mailing list pgsql-sql

From Michael Fuhr
Subject Re: getting back autonumber just inserted
Date
Msg-id 20050707203715.GA26528@winnie.fuhr.org
Whole thread Raw
In response to Re: getting back autonumber just inserted  (Theodore Petrosky <tedpet5@yahoo.com>)
Responses Re: getting back autonumber just inserted
List pgsql-sql
On Thu, Jul 07, 2005 at 01:14:33PM -0700, Theodore Petrosky wrote:
> 
> you have to use currval inside a transaction...

Not true.  Have you observed otherwise?

> begin;
> insert something that increments the counter;
> select currval('sequence_name');
> end;
> 
> using currval inside a transaction guarantees that the
> value is correct for your insert statement and has not
> changed by another insert statement.

currval() returns the most recently obtained value from the sequence
in the current session, regardless of what other sessions are doing
or whether the current session is in a transaction.  See the
documentation and the FAQ:

http://www.postgresql.org/docs/8.0/static/functions-sequence.html

"Notice that because this is returning a session-local value, it
gives a predictable answer whether or not other sessions have
executed nextval since the current session did."

http://www.postgresql.org/docs/faqs.FAQ.html#4.11.3

"4.11.3) Doesn't currval() lead to a race condition with other users?

"No.  currval() returns the current value assigned by your session, not by
all sessions."

You can do experiments to confirm what the documentation states.
If you see different behavior then please put together a self-contained
test case and report it as a bug.

-- 
Michael Fuhr
http://www.fuhr.org/~mfuhr/


pgsql-sql by date:

Previous
From: mail TechEvolution
Date:
Subject: Re: getting back autonumber just inserted
Next
From: Michael Fuhr
Date:
Subject: Re: getting back autonumber just inserted