Thread: Return value of 'serial' column on insert

Return value of 'serial' column on insert

From
Madison Kelly
Date:
Hi all,

   I have several tables with an 'id' column which is a simple 'serial
unique' type. Often when I insert a record the next thing I need is to
add or edit another table elsewhere using the ID of the entry I just
added. Currently what I do is:

SELECT <table>_id FROM <table> ORDER BY <table>_id DESC LIMIT 1;

   and assume (safely thus far) that the returned value is the one I
just created. Obviously this is bulky and, should by chance another
column be added in that time between insert and read, I would get the
wrong value.

   Is there a way to do an INSERT (in perl, btw) where pgSQL returns the
value just created by the same INSERT? Thanks!

Madison

--
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Madison Kelly (Digimer)
TLE-BU, The Linux Experience; Back Up
http://tle-bu.thelinuxexperience.com
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

Re: Return value of 'serial' column on insert

From
Bruno Wolff III
Date:
On Thu, Jan 27, 2005 at 00:35:25 -0500,
  Madison Kelly <linux@alteeve.com> wrote:
> Hi all,
>
>   I have several tables with an 'id' column which is a simple 'serial
> unique' type. Often when I insert a record the next thing I need is to
> add or edit another table elsewhere using the ID of the entry I just
> added. Currently what I do is:
>
> SELECT <table>_id FROM <table> ORDER BY <table>_id DESC LIMIT 1;
>
>   and assume (safely thus far) that the returned value is the one I
> just created. Obviously this is bulky and, should by chance another
> column be added in that time between insert and read, I would get the
> wrong value.
>
>   Is there a way to do an INSERT (in perl, btw) where pgSQL returns the
> value just created by the same INSERT? Thanks!

You can use the currval function to get the id. Normally the sequence
will have a name like table_column_seq. In 8.0, there is a function
you can use to get the sequence name, which is a bit more robust than
hard coding it.