导入的数据,重复的键值违反了唯一约束

时间:2019-03-29 18:34:11

标签: postgresql asp.net-core npgsql

我正在从MSSQL迁移数据。 我通过npgsql生成的迁移在PostgreSQL中创建了数据库。我移动了数据,现在当代码尝试插入值时,我得到了 “重复的键值违反了唯一约束”

npgsql尝试插入ID为1.的列。但是表中的ID已经超过一千。

Npgsql.EntityFrameworkCore.PostgreSQL是2.2.3(最新)

在我的上下文生成器中,我有

 modelBuilder.ForNpgsqlUseIdentityColumns();

我应该朝哪个方向解决这个问题?

如果数据库为空并且没有任何导入的数据,则代码可以正常运行

谢谢

1 个答案:

答案 0 :(得分:2)

在迁移过程中插入的值包含主键值,因此列后面的序列没有增加,而是保持为1。正常插入-未指定PK值-调用序列,得到{{1 }},该表已经存在。

要解决此问题,您可以将序列增加到当前最大值。

1

如果您已经知道序列名称,可以将其缩短为

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