Re: get last oid - Mailing list pgsql-odbc
From | Miguel Juan |
---|---|
Subject | Re: get last oid |
Date | |
Msg-id | 005601c3c63a$821a9990$07c8a8c0@miguel2000 Whole thread Raw |
In response to | Re: get last oid ("Leeuw van der, Tim" <tim.leeuwvander@nl.unisys.com>) |
List | pgsql-odbc |
Hello, if you make an Insert on a table with a serial, you can get the last value of the serial inserted by your session using: SELECT currval('Sequence_name'); This is better and faster than any other solution. This ensures you to get the last sequence number asigned to your session. Doesn't matter the number of concurrent INSERTS made by other clients. Regards Miguel Juan ----- Original Message ----- From: Ropel To: postgre Sent: Friday, December 19, 2003 2:57 PM Subject: Re: [ODBC] get last oid ... You can't: some other task can do another insert between your insert and your select, so you get the serial of the other record, not yours ! ----- Original Message ----- From: "Leeuw van der, Tim" <tim.leeuwvander@nl.unisys.com> To: "'Ropel'" <ropel@ropel.it>; "postgre" <pgsql-odbc@postgresql.org> Sent: Friday, December 19, 2003 1:21 PM Subject: RE: [ODBC] get last oid > Hiya, > > You get the serial as a result of your select from sequence... > > --Tim > > -----Original Message----- > From: pgsql-odbc-owner@postgresql.org > [mailto:pgsql-odbc-owner@postgresql.org]On Behalf Of Ropel > Sent: vrijdag 19 december 2003 13:07 > To: postgre > Subject: Re: [ODBC] get last oid > > > Yes of course, but doing so you have the same old problem: which serial did > you get ?? > > ----- Original Message ----- > From: "Shachar Shemesh" <psql@shemesh.biz> > To: "Ropel" <ropel@ropel.it> > Cc: "postgre" <pgsql-odbc@postgresql.org> > Sent: Friday, December 19, 2003 12:38 PM > Subject: Re: [ODBC] get last oid > > > > Ropel wrote: > > > > >... In a well designed relational Db, every table has a (unique) primary > > >key: if so, you don't even need to > > >know the oid, because the record just inserted is directly reachable > using > > >the PK. > > >If your PK uses sequences, you have to get the next seq value "select > > >nextval() from seq_xxxxx..." and use the > > >value obtained for inserting your new row instead of using it as a > default > > >value; this way you are protected from > > >concurrent writing to the DB. > > > > > >If you REALLY need the oid from the ODBC connection, I can't help... > sorry ! > > > > > >Bye > > > > > >Roberto > > > > > > > > > > > Actually, if you created the sequence implicitly by using the "serial" > > type, you don't even have to do that. You can simply do this: > > creating the table: > > create table foo (index serial not null, a type, b type.....); > > inserting into the table: > > insert into foo (a,b,....).... > > > > I.e. - leave the serial field out of the insert, and it will > > automatically be set to the next sequence from the table. > > > > -- > > Shachar Shemesh > > Open Source integration & consulting > > Home page & resume - http://www.shemesh.biz/ > > > > > > > > > > ---------------------------(end of broadcast)--------------------------- > TIP 6: Have you searched our list archives? > > http://archives.postgresql.org > ---------------------------(end of broadcast)--------------------------- TIP 5: Have you checked our extensive FAQ? http://www.postgresql.org/docs/faqs/FAQ.html
pgsql-odbc by date: