Thread: Value of serial data type after insert.

Value of serial data type after insert.

From
Ernest Kim
Date:
I was wondering if there was a way to get the value of serial data
type after an insert.  For example, you have the following table:

create table my_names   (
       id    serial unique,
       name    varchar(10)
);

And then you do the following:

insert into my_names values ('Ernie');

How do I get the value of the "id" column after the insert command?  I
want to make sure that I avoid race conditions, for example:

User A: insert into my_names values ('Ernie');
User B: insert into my_names values ('Bob');
User A: select last_value from my_names_id_seq;
User B: select last_value from my_names_id_seq;

Both user A and B end up with the same returned value after the select
command.

Note this would be coded through PHP if this helps at all.  Thanks.

-Ernie

Re: Value of serial data type after insert.

From
Michael Fuhr
Date:
On Wed, Nov 10, 2004 at 02:34:22PM -0500, Ernest Kim wrote:

> I was wondering if there was a way to get the value of serial data
> type after an insert.

Use currval():

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

Race condtions aren't a problem:

"Notice that because this is returning a session-local value, it
gives a predictable answer even if other sessions are executing
nextval meanwhile."

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