我有两个Django站点:一个用于开发,一个用于生产。每隔一段时间,开发数据库中的数据需要传输到生产数据库或反之。我使用postgresql。
这很好用:我从要复制的数据库中清空表,我从适用的表生成sql,并在清空的表中插入数据。到目前为止,非常好。
但是当我通过管理界面将数据输入数据库时,Django会引发IntegrityErrors,因为appname_modelname_pkey已经存在。
我认为这是因为管理界面想要添加id为1的数据,但这已经是导入的记录了。 Django不知道id'1'已被占用。
如何解决此问题?我希望Django增加id(就像SQL auto_increment那样),无论已经存储了什么数据。
感谢任何帮助!
答案 0 :(得分:0)
如果您在两侧使用postgres,那么与主键关联的序列将会有所不同。
例如,假设您正在将生产数据移至开发阶段。另外,假设生产中的序列值为20,开发中的序列为10.然后,您在开发中添加的第一个新项目的ID为11.该ID(可能)已经存在于生产数据中,因此您获得了完整性错误。
从转储中还原表时,可以通过在还原之前删除并重新创建现有表来重置序列。
(或者,您可以使用ALTER SEQUENCE
命令来同步序列。但是,我对postgres不太熟悉,以确定这是否是正确的方法。)