database - bulk_create 后 Django 1.4 主键冲突

标签 database django conflict

我正在使用 Django 1.4,以 postgresql 作为数据库,我有以下模型:

class Keyword(models.Model):
    name = models.CharField(max_length=100)

我正在使用 bulk_create 使用来自另一个数据库的数据填充 django 数据库, 一些代码类似于:

Keyword.objects.bulk_create([Keyword(id=id, name=name) for id,name in [(1,"k1"),(2,"k2"),(3,"k3")] ])

遗留数据已经有主键,保持这种方式很重要。

问题是,当我尝试创建新对象时,Django 会使用从 1 开始的主键,并抛出冲突异常:

k = Keyword(name="k4")
k.save()

给我错误

IntegrityError: duplicate key value violates unique constraint "sinbiota_keyword_pkey"
DETAIL:  Key (id)=(1) already exists.

有没有办法强制Django从另一个值开始主键增量,或者有什么办法可以解决这个冲突?

最佳答案

我通过在 Django 之外的 postgresql 的自动递增逻辑中使用 setval 设置下一个 id 来解决这个问题。命令,类似于问题Postgresql setting next id to write toHow to reset postgres' primary key sequence when it falls out of sync? .

在我的示例中,我必须在 psql 中执行命令

select setval('keyword_id_seq', 3); 

哪里keyword_id_seq是自动递增序列的名称(默认为 <table_name>_<column_name>_seq' ),6965 是表中存在的最大 ID。那样, 自增从下一个 id 开始(在本例中为 4),不会发生冲突。

关于database - bulk_create 后 Django 1.4 主键冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14224908/

相关文章:

sql - 传递表格数据的二进制格式

django - 在单元测试期间暂时禁用 Django 缓存

python - Django send_mail 在 1.7 中失败说没有 django_smtp_ssl

java - 无法在 Fedora 14 上安装 JDK 1.7

c# - 我应该使用哪种数据类型来处理九位帐号,为什么?

database - 需要在不使用 Management Studio 的情况下创建新数据库

database - 应用程序的最佳方式

python - 类型错误 : cannot unpack non-iterable int object in Django views function

svn - Subversion - 始终使用我的解决一组文件的冲突

jquery - 如何使 jQuery 库不互相影响?