Почему вставка первичного ключа не влияет на последовательность? - PullRequest
0 голосов
/ 11 июня 2018

При вставке строк с неявными первичными ключами это, похоже, не влияет на последовательность первичных ключей, а затем, при попытке вставки без PK, происходит сбой:

create table testtable(
  id serial primary key,
  data integer not null
);

Вставка с PK (например, при переносе данных):

insert into testtable ( id, data ) values ( 1,2 ), ( 2,2 ), ( 3,2 ), ( 4,2 );
INSERT 0 4

Вставка новых данных без PK:

insert into testtable ( data ) values ( 4 ), ( 5 ), ( 6 ), ( 7 );
ERROR:  duplicate key value violates unique constraint "testtable_pkey"
DETAIL:  Key (id)=(1) already exists.

Почему последовательность не устанавливается на максимальное значение после первого INSERT?Должен ли я контролировать последовательности после вставки с PK?Есть ли способ автоматически установить последовательность на правильном пути?

1 Ответ

0 голосов
/ 11 июня 2018

Причиной такого поведения является то, что к последовательности обращаются в значении DEFAULT столбца, и значение по умолчанию не используется, когда столбец вставляется явно.

Единственный способ добиться того, чтовы хотите, чтобы я мог представить, что у вас есть триггер, который изменяет последовательность после вставки, но я думаю, что это будет медленное и ужасное решение.

Лучший способ продолжить - это настроить последовательность один раз послевы закончили с миграцией.

...