Импортированные данные, двойное значение ключа нарушает уникальное ограничение - PullRequest
1 голос
/ 29 марта 2019

Я мигрирую данные из MSSQL. Я создал базу данных в PostgreSQL через миграцию, сгенерированную npgsql. Я переместил данные и теперь, когда код пытается вставить значение, которое я получаю 'дубликат значения ключа нарушает уникальное ограничение'

npgsql пытается вставить столбец с идентификатором 1..Когда таблица уже имеет идентификатор более тысячи.

Npgsql.EntityFrameworkCore.PostgreSQL - 2.2.3 (последняя версия)

В моем конструкторе контекста у меня есть

 modelBuilder.ForNpgsqlUseIdentityColumns();

В каком направлении мне копать, чтобы решить такую ​​проблему?

Код работает нормально, если база данных пуста и не имеет импортированных данных

Спасибо

1 Ответ

3 голосов
/ 30 марта 2019

Значения, вставленные во время миграции, содержали значение первичного ключа, поэтому последовательность за столбцом не была увеличена и поддерживается на уровне 1. Обычная вставка - без указания значения PK - вызывает последовательность, получает 1, который уже существует в таблице.

Чтобы исправить это, вы можете увеличить последовательность до текущего максимального значения.

SELECT setval(
        pg_get_serial_sequence('myschema.mytable','mycolumn'), 
        max(mycolumn)) 
FROM myschema.mytable;

Если вы уже знаете имя последовательности, вы можете сократить егодо

SELECT setval('my_sequence_name', max(mycolumn)) 
FROM myschema.mytable;
...