Thread: get sequence value of insert command

get sequence value of insert command

From
Erik Thiele
Date:
hi

create sequence mysequence;

create table foo( id integer default nextval('mysequence'), bla text, wombat integer, foobar date, primary key(id)
);

insert into foo (wombat) values (88);

now how do i know the id of my newly inserted element? and
how can this be done in a completely concurrency safe way?


cya
erik


Re: get sequence value of insert command

From
Achilleus Mantzios
Date:
O Erik Thiele έγραψε στις Nov 19, 2004 :

> hi
> 
> create sequence mysequence;
> 
> create table foo(
>   id integer default nextval('mysequence'),
>   bla text,
>   wombat integer,
>   foobar date,
>   primary key(id)
> );
> 
> insert into foo (wombat) values (88);
> 
> now how do i know the id of my newly inserted element? and
> how can this be done in a completely concurrency safe way?

The way to do this is by reading the docs :)

use currval, it is session safe.

> 
> 
> cya
> erik
> 
> ---------------------------(end of broadcast)---------------------------
> TIP 7: don't forget to increase your free space map settings
> 

-- 
-Achilleus



Re: get sequence value of insert command

From
Michael Glaesemann
Date:
On Nov 19, 2004, at 5:41 PM, Erik Thiele wrote:

> now how do i know the id of my newly inserted element? and
> how can this be done in a completely concurrency safe way?

This is a FAQ (4.15.1, among others). See currval() and nextval() in 
the documentation as well.

Michael Glaesemann
grzm myrealbox com



Re: get sequence value of insert command

From
Richard Huxton
Date:
Achilleus Mantzios wrote:
>>
>>now how do i know the id of my newly inserted element? and
>>how can this be done in a completely concurrency safe way?
> 
> 
> The way to do this is by reading the docs :)
> 
> use currval, it is session safe.

The increase in this question suggests the number of new users has 
increased since 8.0 went into beta-test. It's pretty much the first 
question anyone asks.

I seem to recall it was mine. I made the mistake of assuming it wasn't 
concurrency safe and was gently corrected by one of the community. I 
think it might have been a Tim/Tam Lane. Wonder what happened to him? :-)

--   Richard Huxton  Archonet Ltd


Re: get sequence value of insert command

From
"Iain"
Date:
> I seem to recall it was mine. I made the mistake of assuming it wasn't 
> concurrency safe and was gently corrected by one of the community. I 
> think it might have been a Tim/Tam Lane. Wonder what happened to him? :-)

Mmmmm.... tim tams

rgds
Homer


Re: get sequence value of insert command

From
"Passynkov, Vadim"
Date:

> -----Original Message-----
> From: Erik Thiele [mailto:erik@thiele-hydraulik.de]
> Sent: Friday, November 19, 2004 3:42 AM
> To: pgsql-sql@postgresql.org
> Subject: [SQL] get sequence value of insert command
> 
> 
> hi
> 
> create sequence mysequence;
> 
> create table foo(
>   id integer default nextval('mysequence'),
>   bla text,
>   wombat integer,
>   foobar date,
>   primary key(id)
> );
> 
> insert into foo (wombat) values (88);
> 
> now how do i know the id of my newly inserted element? and
> how can this be done in a completely concurrency safe way?

CREATE RULE get_pkey_on_insert AS ON INSERT TO foo DO SELECT
currval('mysequence') AS id LIMIT 1;

> 
> 
> cya
> erik
> 
> ---------------------------(end of 
> broadcast)---------------------------
> TIP 7: don't forget to increase your free space map settings
> 


Re: get sequence value of insert command

From
Erik Thiele
Date:
On Fri, 19 Nov 2004 10:57:12 -0500
"Passynkov, Vadim" <Vadim.Passynkov@pathcom.com> wrote:

> > -----Original Message-----
> > From: Erik Thiele [mailto:erik@thiele-hydraulik.de]
> > Sent: Friday, November 19, 2004 3:42 AM
> > To: pgsql-sql@postgresql.org
> > Subject: [SQL] get sequence value of insert command
> > 
> > create sequence mysequence;
> > 
> > create table foo(
> >   id integer default nextval('mysequence'),
> >   bla text,
> >   wombat integer,
> >   foobar date,
> >   primary key(id)
> > );
> > 
> > insert into foo (wombat) values (88);
> > 
> > now how do i know the id of my newly inserted element? and
> > how can this be done in a completely concurrency safe way?
> 
> CREATE RULE get_pkey_on_insert AS ON INSERT TO foo DO SELECT
> currval('mysequence') AS id LIMIT 1;

now that one is really great! you should definitly add it to the
faq. plus an additional explanation why the limit 1 is needed here.

thanks!
erik


Re: get sequence value of insert command

From
"Passynkov, Vadim"
Date:
> > > create sequence mysequence;
> > > 
> > > create table foo(
> > >   id integer default nextval('mysequence'),
> > >   bla text,
> > >   wombat integer,
> > >   foobar date,
> > >   primary key(id)
> > > );
> > > 
> > > insert into foo (wombat) values (88);
> > > 
> > > now how do i know the id of my newly inserted element? and
> > > how can this be done in a completely concurrency safe way?
> > 
> > CREATE RULE get_pkey_on_insert AS ON INSERT TO foo DO SELECT
> > currval('mysequence') AS id LIMIT 1;
> 
> now that one is really great! you should definitly add it to the
> faq. plus an additional explanation why the limit 1 is needed here.

INSERT INTO foo ( ... ) ( SELECT * FROM foo1 );

> 
> thanks!
> erik
> 

-- 
Vadim Passynkov