Re: Getting ID of last-inserted row

From: Scott Marlowe <scott(dot)marlowe(at)gmail(dot)com>
To: David <wizzardx(at)gmail(dot)com>
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: Getting ID of last-inserted row
Date: 2009-05-20 15:59:27
Message-ID: dcc563d10905200859q3813efbt2ba1eb41b49ce4c@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On Wed, May 20, 2009 at 4:35 AM, David <wizzardx(at)gmail(dot)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.

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Howard Cole 2009-05-20 16:43:36 Re: [Windows] Feedback on PG?
Previous Message Leif B. Kristensen 2009-05-20 15:56:16 Re: [Windows] Feedback on PG?