Django South和Constraint IDs
在创建唯一和外键约束时,South如何为约束名称提供ID,如:Django South和Constraint IDs,django,postgresql,django-south,database-migration,Django,Postgresql,Django South,Database Migration,在创建唯一和外键约束时,South如何为约束名称提供ID,如: CONSTRAINT report_type_id_refs_id_435782e833badd2f FOREIGN KEY (report_type_id) REFERENCES reports_reporttype (id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION DEFERRABLE INITIALLY DEFERRED, 我一直遇到的问题是迁移试图删除约束,
CONSTRAINT report_type_id_refs_id_435782e833badd2f FOREIGN KEY (report_type_id)
REFERENCES reports_reporttype (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION DEFERRABLE INITIALLY DEFERRED,
我一直遇到的问题是迁移试图删除约束,但数据库中的实际约束是不同的
这个散列是由South自己生成的,还是来自数据库?
这个散列是基于什么的?
使用PostgreSQL作为数据库
更新:我注意到不匹配不是完全随机的。以下是数据库的功能:
CONSTRAINT user_id_refs_id_f15cc3cd FOREIGN KEY (user_id)
REFERENCES brandnew4.auth_user (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION DEFERRABLE INITIALLY DEFERRED
这是South试图删除的一个矛盾:
django.db.utils.DatabaseError: constraint "user_id_refs_id_7e2ccc6bf15cc3cd" of relation "operatorInterface_ospreyuserprofile" does not exist
如果仔细查看这些约束名称:
user_id_refs_id_f15cc3cd
user_id_refs_id_7e2ccc6bf15cc3cd
db中的8位十六进制键与South正在查找的16位十六进制键的最后8位相同
发生什么事了
更新2:
我跟踪了哈希的生成位置:
为什么South在一次迁移中使用64位版本的哈希,而在另一次迁移中使用32位版本的哈希
South版本0.8.4-我在一个全新的空白数据库上运行了这个。
Django版本1.4.2的问题是:South总是在公共模式中查找约束名称,并且迁移应用于公共模式以外的模式。因此,错误匹配