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.
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? |