Re: Ref to last INSERT on a table without OIDs?

From: Stephan Szabo <sszabo(at)megazone23(dot)bigpanda(dot)com>
To: Mark Cave-Ayland <mark(dot)cave-ayland(at)webbased(dot)co(dot)uk>
Cc: <pgsql-general(at)postgresql(dot)org>
Subject: Re: Ref to last INSERT on a table without OIDs?
Date: 2003-01-28 16:53:52
Message-ID: 20030128084906.J93656-100000@megazone23.bigpanda.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On Tue, 28 Jan 2003, Mark Cave-Ayland wrote:

>
> > -----Original Message-----
> > From: Stephan Szabo [mailto:sszabo(at)megazone23(dot)bigpanda(dot)com]
> > Sent: 28 January 2003 16:14
> > To: Mark Cave-Ayland
> > Cc: pgsql-general(at)postgresql(dot)org
> > Subject: Re: [GENERAL] Ref to last INSERT on a table without OIDs?
> >
> >
> > On Tue, 28 Jan 2003, Mark Cave-Ayland wrote:
> >
> > > Hi there,
> > >
> > > Hopefully just a quick one: how is it possible to obtain a reference
> to
> > > the last inserted record in a table which is created without oids? I
> > > would like to dump/restore some of our larger tables so they don't
> use
> > > oids, however I am concerned that simply getting the current PK
> sequence
> > > value after insertion within a transaction is not safe when many
> people
> > > are accessing the table/sequence at once? Can anyone clarify this?
> We're
> > > using the latest and greatest 7.3.1.
> >
> > If you use currval() to get the sequence value it'll be the last value
> > given to your session so you don't have to worry about other sessions
> > modifying the sequence.
>
> Thanks for your reply! But I'm still a little confused by what defines a
> session - is it a transaction or a backend? I'm just thinking about
> connections from web pages which use PHP pooled connections..... if a
> session is a transaction then I'm guessing everything should work fine
> without any problems?

It's to the backend, but as long as you're asking for the value before you
release the connection to another script you should be fine. If you want
to do something like:

script 1 inserts
- release connection so someone else can get it
script 2 inserts
- release connection
script 1 wants a value

You can't do that without converting it to a different form
script 1 inserts
script 1 saves its inserted value
- release connection
...
- release connection
script 1 retrieves inserted value.

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Vivek Khera 2003-01-28 16:56:40 Re: Vacuum verbose output?
Previous Message Dennis Gearon 2003-01-28 16:50:03 stopping access to a database