Re: serial type; race conditions - Mailing list pgsql-sql

From postgresql
Subject Re: serial type; race conditions
Date
Msg-id 200103291431.f2TEVwK25942@postgresql.org
Whole thread Raw
In response to Re: serial type; race conditions  (Bruce Momjian <pgman@candle.pha.pa.us>)
Responses Re: serial type; race conditions
Re: serial type; race conditions
List pgsql-sql
How does currval work if you are not inside a transaction. I have 
been experimenting with inserting into a table that has a sequence. 
If the insert fails (not using a transaction) because of bad client input 
then the next insert gets the proper next number in the sequence.

given sequence 1,2,3,4,5 exists
insert into table date 1/111/01 (obviously wrong) insert fails...
try again with good data, insert succeeds and gets number 6 in the 
sequence.

i'm getting what I want. A sequence number that does not increment 
on a failed insert. However, how do I get the assigned sequence 
number with currval when I am not using a transaction? What 
happens when multiple users are inserting at the same time? 

I am trying to create a sequence with out any "missing" numbers. If 
there is a failure to insert, and a sequence number is "taken". I want 
the empty row.

Thanks, .... it is getting clearer....

Ted


-----Original Message-----
From: Bruce Momjian <pgman@candle.pha.pa.us>
To: jkakar@expressus.com
Date: Mon, 26 Mar 2001 16:47:37 -0500 (EST)
Subject: Re: [SQL] serial type; race conditions

> > Hi,
> > 
> > I'm using serial fields to generate IDs for almost all object in my
> > database.  I insert an empty row, get the CURRVAL() of the 
sequence
> > and then update to that value.
> > 
> > I had understood (and now, I can't find the reference to back this
> up)
> > that serial is implemented in such a way that race conditions 
between
> > DB connections can't happen.
> > 
> > Is this true?
> 
> Safe.  See FAQ item.  currval is for your backend only.
> 
> -- 
>   Bruce Momjian                        |  http://candle.pha.pa.us
>   pgman@candle.pha.pa.us               |  (610) 853-3000
>   +  If your life is a hard drive,     |  830 Blythe Avenue
>   +  Christ can be your backup.        |  Drexel Hill, Pennsylvania
> 19026
> 
> ---------------------------(end of
> broadcast)---------------------------
> TIP 2: you can get off all lists at once with the unregister command
>     (send "unregister YourEmailAddressHere" to
> majordomo@postgresql.org)




pgsql-sql by date:

Previous
From: Mathijs Brands
Date:
Subject: Re: Calling Java from psql (was Re: requesting help)
Next
From: Bruce Momjian
Date:
Subject: Re: serial type; race conditions