From: | Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us> |
---|---|
To: | postgresql <pgsql(at)symcom(dot)com> |
Cc: | PgSQL-SQL <pgsql-sql(at)postgresql(dot)org> |
Subject: | Re: serial type; race conditions |
Date: | 2001-03-29 14:36:39 |
Message-ID: | 200103291436.JAA00463@candle.pha.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | 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.
If you are in a transaction, and the INSERT succeeds but the transaction
rolls back, the sequence does not get reused. Each backend has a local
variable that holds the most recent sequence assigned. That is how
currval works.
>
> 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....
You really can't use sequences with no gaps. Sequence numbers are not
_held_ until commit because it would block other backends trying to get
sequence numbers.
--
Bruce Momjian | http://candle.pha.pa.us
pgman(at)candle(dot)pha(dot)pa(dot)us | (610) 853-3000
+ If your life is a hard drive, | 830 Blythe Avenue
+ Christ can be your backup. | Drexel Hill, Pennsylvania 19026
From | Date | Subject | |
---|---|---|---|
Next Message | postgresql | 2001-03-29 14:41:23 | Re: serial type; race conditions |
Previous Message | Mathijs Brands | 2001-03-29 14:05:54 | Re: Calling Java from psql (was Re: requesting help) |