serial increments on failed insert - Mailing list pgsql-general

From David Kammer
Subject serial increments on failed insert
Date
Msg-id 41E8684C.40402@u.washington.edu
Whole thread Raw
Responses Re: serial increments on failed insert  (David Fetter <david@fetter.org>)
List pgsql-general
Ive noticed what seems to be an odd effect in psql 7.3.  It works like this:

1> Create a table:
CREATE TABLE foo
(
   sval serial,
   uval int UNIQUE
);

2> Run 3 inserts, the second of which fails because it fails the
    unique constraint:
INSERT INTO foo VALUES (DEFAULT,1);
INSERT INTO foo VALUES (DEFAULT,1);   <--- This fails
INSERT INTO foo VALUES (DEFAULT,2);

3> look at the table:
SELECT * FROM foo;
 sval | uval
------+------
    1 |    1
    3 |    2   <--- look here
(2 rows)

Notice that even though the second insert failed, it still incremented
the serial value.  This seems counter intuative to the way that serial
should work.  Is this truly a bug, or is there a good work around?

Thanks,
Dave

pgsql-general by date:

Previous
From: "Sim Zacks"
Date:
Subject: Re: Books for experienced DB developer
Next
From: "lol"
Date:
Subject: Re: PostgreSQL 8 on windows very slow