Received: from www.arcamax.com (arcamax.com [209.96.210.66]) by hub.org (8.9.3/8.9.3) with ESMTP id JAA50956 for ; Mon, 13 Sep 1999 09:03:56 -0400 (EDT) (envelope-from bryan@arcamax.com) Received: from bryan.arcamax.com (bryan [209.96.210.34]) by www.arcamax.com (8.9.3/8.9.3) with SMTP id JAA16571 for ; Mon, 13 Sep 1999 09:03:54 -0400 Message-ID: <000f01befde8$6ec81940$22d260d1@arcamax.com> From: "Bryan White" To: References: <2567.937152101@sss.pgh.pa.us> Subject: Re: [INTERFACES] ecpg and getting just assigned serial number Date: Mon, 13 Sep 1999 09:03:54 -0400 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 5.00.2014.211 X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2014.211 > theofilu@eunet.at (Theofilu Andreas) writes: > > to Informix's 'esqlc'. However. I have a table with a field of type > > 'serial'. Now I've no problem to insert any sentences into this table, but > > immediately after inserting a new sentence I need the newly assigned number > > to the serial field in the table. How can I access this number? > > Postgres doesn't return that number automatically; you'll have to run a > separate query to find out what was inserted. You could do something > like > select serialcolumn from table where oid = NNNN; > since a single-row insert does return the OID of the inserted row. > (Note this will be pretty slow if the table is big and does not have > an index on OID.) > > Another possibility is to execute nextval() for yourself and then insert > that result explicitly when you create the row. Still takes two queries, > though. Another possibility is to "select currval('seqname')" where seqname is the name of the sequence associated with the serial field. currval's are maintained per connection so there are no multiuser problems. In many cases you don't have retrieve the value but just use the expression is subsequent statements.