2010-09-07 83 views
1

我有两个Django站点:一个用于开发,一个用于生产。偶尔,开发数据库中的数据需要传输到生产数据库或其他方式。我使用postgresql。手动添加数据导致IntegrityError

这工作正常:我从我想要复制到的数据库中清空表,我从适用的表中生成sql,并将数据插入到清空的表中。到现在为止还挺好。

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

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

我该如何解决这个问题?我希望Django增加id(就像SQL auto_increment会做的那样),不管已经存储了什么数据。

任何帮助表示赞赏!

+0

你是一个有点含糊当你说“每隔一段时间,开发数据库中的数据需要传输到生产数据库或其他方式”。究竟是什么数据正在传输,它与表中已经存在的数据有什么关系?在大约3年前我做的一个项目中,我们有一些在开发中掌握的表格,并在更新时清除/重写(例如文章),以及在生产中掌握并且在更新期间从未触摸的其他(例如会话)。 – 2010-09-08 05:01:46

+0

嗨,彼得。我想将一些数据库中的数据(不是已经相同的结构)转移到另一个数据库中。你是对的:并非所有的表格都被传送(例如,会话不是)。 – Patrick 2010-09-08 18:53:05

回答

0

如果您在两边都使用postgres,那么与主键关联的顺序将会不同。

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

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

(或者,你也许可以使用ALTER SEQUENCE命令同步上涨的序列。不过,我不是随着Postgres不够熟悉,说不管是做正确的方式。)

+0

这工作,非常感谢你!我使用PhpPgAdmin并改变了“序列”(db - > public - > sequences)。 – Patrick 2010-09-08 19:08:02