导入数据,重复键值违反唯一约束
Imported data, duplicate key value violates unique constraint
我正在从 MSSQL 迁移数据。
我通过 npgsql 生成的迁移在 PostgreSQL 中创建了数据库。我移动了数据,现在当代码尝试插入一个值时,我得到了
'duplicate key value violates unique constraint'
npgsql 尝试插入一个 ID 为 1 的列。但是 table 已经有超过一千个 ID。
Npgsql.EntityFrameworkCore.PostgreSQL 是 2.2.3(最新)
在我的上下文构建器中,我有
modelBuilder.ForNpgsqlUseIdentityColumns();
我应该往哪个方向深挖才能解决这样的问题?
如果数据库为空且没有任何导入数据,代码运行正常
谢谢
迁移期间插入的值包含主键值,因此列后面的序列不会递增并保持为 1。正常插入 - 不指定 PK 值 - 调用序列,得到 1
,已经存在于 table.
要修复它,您可以将序列提高到当前最大值。
SELECT setval(
pg_get_serial_sequence('myschema.mytable','mycolumn'),
max(mycolumn))
FROM myschema.mytable;
如果您已经知道序列名称,可以将其缩短为
SELECT setval('my_sequence_name', max(mycolumn))
FROM myschema.mytable;
我正在从 MSSQL 迁移数据。 我通过 npgsql 生成的迁移在 PostgreSQL 中创建了数据库。我移动了数据,现在当代码尝试插入一个值时,我得到了 'duplicate key value violates unique constraint'
npgsql 尝试插入一个 ID 为 1 的列。但是 table 已经有超过一千个 ID。
Npgsql.EntityFrameworkCore.PostgreSQL 是 2.2.3(最新)
在我的上下文构建器中,我有
modelBuilder.ForNpgsqlUseIdentityColumns();
我应该往哪个方向深挖才能解决这样的问题?
如果数据库为空且没有任何导入数据,代码运行正常
谢谢
迁移期间插入的值包含主键值,因此列后面的序列不会递增并保持为 1。正常插入 - 不指定 PK 值 - 调用序列,得到 1
,已经存在于 table.
要修复它,您可以将序列提高到当前最大值。
SELECT setval(
pg_get_serial_sequence('myschema.mytable','mycolumn'),
max(mycolumn))
FROM myschema.mytable;
如果您已经知道序列名称,可以将其缩短为
SELECT setval('my_sequence_name', max(mycolumn))
FROM myschema.mytable;