Re: Getting ID of last-inserted row - Mailing list pgsql-general

From Scott Marlowe
Subject Re: Getting ID of last-inserted row
Date
Msg-id dcc563d10905200859q3813efbt2ba1eb41b49ce4c@mail.gmail.com
Whole thread Raw
In response to Fwd: Getting ID of last-inserted row  (David <wizzardx@gmail.com>)
List pgsql-general
On Wed, May 20, 2009 at 4:35 AM, David <wizzardx@gmail.com> wrote:
>>> I never found an adequate (simple and efficient) method for getting
>>> the primary key ID of the just-inserted row, and usually used
>>> transactions and "select last value, ordered by id"-type queries to
>>> get the last id value, or other ugly logic.
>>
>> use currval() instead, see
>> http://www.postgresql.org/docs/current/static/functions-sequence.html
>> --
>
> I think I researched that before also, but I wasn't sure at the time
> how safe it was against race conditions. Although I see now (reading
> the docs again) that it is tracked for different sessions so it should
> be safe.

It is.

>> Also, you can do insert....returning... (as of version 8.2, I think):
>>
>> INSERT INTO clients (id, name)
>>  VALUES (nextval('clients_id_seq'), 'John Smith')
>>  RETURNING id;
>
> Thanks. I think I saw that too, not too long ago, but forgot about it.
> Some of the PostgreSQL services I use are on older versions, so I need
> to use older syntax. But, this will be useful when the db version is
> guaranteed to be recent. Thanks also for your reminder.

The one thing returning makes easy is getting the return id of multiple records.

insert into tablea values (val),(val),(val),(val) returning id;

will return a set of 4 different ids, not just one.  And if there's a
gap in the sequence you'll not get the wrong numbers.

pgsql-general by date:

Previous
From: "Leif B. Kristensen"
Date:
Subject: Re: [Windows] Feedback on PG?
Next
From: Howard Cole
Date:
Subject: Re: [Windows] Feedback on PG?