How do I get the rec-id from an insert.

How do I get the rec-id from an insert.

am 28.08.2002 05:40:17 von Chris Ruprecht

Hi all,

I have 3 tables:

a:
a.recid
a.name

b:
b.recid
b.address
b.city

c:
c.recid
c.arecid
c.brecid


each has a default sequence on their respective recid - which is the primar=
y=20
index.

when I do an "insert into a ...", it automagically assigns recid a new, uni=
que=20
value, same goes for b.

But to create c, I need to know the recid from a and b, so I can connect th=
e=20
two.
Is there any way to get the recid from a and b after they have been inserte=
d=20
like in "insert into a ... and give me the recid you're going to use, back"?

I know, I can do a "netxval('...')" stuff and then insert the records with=
=20
values in recid, but that requires two extra calls to the DB per transactio=
n.

Best regards,
Chris



--=20
Chris Ruprecht
Network Grunt and bitpusher extraordinaire

---------------------------(end of broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
(send "unregister YourEmailAddressHere" to majordomo@postgresql.org)

Re: How do I get the rec-id from an insert.

am 29.08.2002 23:00:15 von Clinton Adams

Chris -

You don't really need to know the key values - make it one query:

insert into c values (nextval('crecid'), currval('arecid'), currval('brecid'))


On Tue August 27 2002 21:40, Chris Ruprecht graced us with the following -
> Hi all,
>
> I have 3 tables:
>
> a:
> a.recid
> a.name
>
> b:
> b.recid
> b.address
> b.city
>
> c:
> c.recid
> c.arecid
> c.brecid
>
>
> each has a default sequence on their respective recid - which is the
> primary index.
>
> when I do an "insert into a ...", it automagically assigns recid a new,
> unique value, same goes for b.
>
> But to create c, I need to know the recid from a and b, so I can connect
> the two.
> Is there any way to get the recid from a and b after they have been
> inserted like in "insert into a ... and give me the recid you're going to
> use, back"?
>
> I know, I can do a "netxval('...')" stuff and then insert the records with
> values in recid, but that requires two extra calls to the DB per
> transaction.
>
> Best regards,
> Chris


---------------------------(end of broadcast)---------------------------
TIP 5: Have you checked our extensive FAQ?

http://www.postgresql.org/users-lounge/docs/faq.html

Re: How do I get the rec-id from an insert.

am 30.08.2002 00:58:15 von Bruno Wolff III

On Thu, Aug 29, 2002 at 15:00:15 -0600,
Clinton Adams wrote:
> Chris -
>
> You don't really need to know the key values - make it one query:
>
> insert into c values (nextval('crecid'), currval('arecid'), currval('brecid'))

Is it documented that the above is reliable? I don't remember ever reading
that expressions are evaluated in the order they appear in a select
statement.

---------------------------(end of broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
(send "unregister YourEmailAddressHere" to majordomo@postgresql.org)

Re: How do I get the rec-id from an insert.

am 30.08.2002 02:52:46 von Clinton Adams

Bruno -

Three sequences are involved in the INSERT. If one sequence were involved,
then the expressions would be evaluated left to right, at least from what I
can tell through my tests. Not something I would ever use...or rely on, for
that matter.


On Thu August 29 2002 16:58, Bruno Wolff III graced us with the following -
> > insert into c values (nextval('crecid'), currval('arecid'),
> > currval('brecid'))
>
> Is it documented that the above is reliable? I don't remember ever reading
> that expressions are evaluated in the order they appear in a select
> statement.





---------------------------(end of broadcast)---------------------------
TIP 6: Have you searched our list archives?

http://archives.postgresql.org