Re: BUG #14909: nextval() bug

Поиск
Список
Период
Сортировка
От hubert depesz lubaczewski
Тема Re: BUG #14909: nextval() bug
Дата
Msg-id 20171115112608.GA32070@depesz.com
обсуждение исходный текст
Ответ на BUG #14909: nextval() bug  (personal@rysmax.com)
Список pgsql-bugs
On Wed, Nov 15, 2017 at 10:51:36AM +0000, personal@rysmax.com wrote:
> CREATE TABLE "user" (
>   id serial primary key not null,
>   email varchar(64) not null
> );
> INSERT INTO "user" (id, email) VALUES ('1', 'admin@example.com');
> INSERT INTO "user" (id, email) VALUES ('2', 'user@example.com');
> 
> All done without errors.
> 
> 
> 
> When i try to run the query bellow:
> 
> INSERT INTO "user" (email) VALUES ('test@example.com');
> 
> and got the next error in pgAdmin and from the PHP:
> 
> ERROR:  duplicate key value violates unique constraint "user_pkey"
> DETAIL:  Key (id)=(1) already exists.
> 
> but when i try to run this query 2 times the query executed without errors
> on 3rd time.
> I think this is a bug in nextval() function.


No, it's not.

when you insert providing value for id column, default (nextval) is not
called, so sequence is not updated.

So, when you finally try to insert without id, nextval is called and
returns first unused (from the point of view of sequence) value - 1.
Which already is in the table because you "forcibly" inserted it.

To avoid this problem you have to either:

1. run setval(...) after insertiing data with some forced ids
2. always use nextval/default for id column.

Best regards,

depesz



В списке pgsql-bugs по дате отправления:

Предыдущее
От: personal@rysmax.com
Дата:
Сообщение: BUG #14909: nextval() bug
Следующее
От: kevinsantiago-19@hotmail.com
Дата:
Сообщение: BUG #14910: Imposible instalar postgres