手动添加数据会导致IntegrityError

时间:2010-09-07 20:38:43

标签: django django-models

我有两个Django站点:一个用于开发,一个用于生产。每隔一段时间,开发数据库中的数据需要传输到生产数据库或反之。我使用postgresql。

这很好用:我从要复制的数据库中清空表,我从适用的表生成sql,并在清空的表中插入数据。到目前为止,非常好。

但是当我通过管理界面将数据输入数据库时​​,Django会引发IntegrityErrors,因为appname_modelname_pkey已经存在。

我认为这是因为管理界面想要添加id为1的数据,但这已经是导入的记录了。 Django不知道id'1'已被占用。

如何解决此问题?我希望Django增加id(就像SQL auto_increment那样),无论已经存储了什么数据。

感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

如果您在两侧使用postgres,那么与主键关联的序列将会有所不同。

例如,假设您正在将生产数据移至开发阶段。另外,假设生产中的序列值为20,开发中的序列为10.然后,您在开发中添加的第一个新项目的ID为11.该ID(可能)已经存在于生产数据中,因此您获得了完整性错误。

从转储中还原表时,可以通过在还原之前删除并重新创建现有表来重置序列。

(或者,您可以使用ALTER SEQUENCE命令来同步序列。但是,我对postgres不太熟悉,以确定这是否是正确的方法。)