pg.ddx.io  pgsql-interfaces@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Mark Dzmura <mdz@digital-mission.com>
To: pgsql-interfaces@postgreSQL.org <pgsql-interfaces@postgreSQL.org>
Subject: obtaining primary key/rowid following insert, redux...
Date: Wed, 06 Sep 2000 23:15:02 -0400
Message-ID: <39B70836.94523C33@digital-mission.com> (raw)

Peter:

Trying to solve my problem mentioned in the email of half an hour ago, I searched
through the archives of the interface list and found some of your replies suggesting
using "currval()" to get the last value assigned from a sequence...  However,
here's what happens in a good database with multiple in-use sequences:

db=# select currval('foo_foo_id_seq');
ERROR:  foo_foo_id_seq.currval is not yet defined in this session

As an alternative, I discovered that I can get the value this way:

db=# select last_value from foo_foo_id_seq;
last_value
---------
              27

My questions are, (1) why does the currval() approach give the error message, and
(2) is it OK to use my alternative??

Finally, as far as I can tell, there is a real race condition problem here in a multiple-connection
scenario (e.g. another task can cause the sequence to be incremented between the insert
and the select) - but wrapping a transaction around the insert and select should
take care of it... Thoughts??

Thanks,
Mark Dzmura

Attachments:

mdz.vcf (text/x-vcard, 279B) download begin:vcard n:Dzmura;Mark tel;fax:412-429-3361 tel;work:412-429-6001 x-mozilla-html:FALSE org:Digital Mission, LLC adr:;;230 E. Main St., Suite 210;Carnegie;PA;15106;USA version:2.1 email;internet:mdz@digital-mission.com title:President x-mozilla-cpt:;0 fn:Mark Dzmura end:vcard

view thread (5+ messages)  latest in thread

Message-ID: <39B70836.94523C33@digital-mission.com>
Permalink:  ../39B70836.94523C33@digital-mission.com/
Also on:    postgresql.org/message-id/39B70836.94523C33@digital-mission.com

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-interfaces@postgresql.org
  Cc: mdz@digital-mission.com
  Subject: Re: obtaining primary key/rowid following insert, redux...
  In-Reply-To: <39B70836.94523C33@digital-mission.com>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox