Django 1.11升级创建`user_id`约束

时间:2018-03-21 21:40:46

标签: python mysql django

我正在从Django 1.8升级到1.11。升级0007_auth0008_auth中包含2次迁移。

由于某些原因,0008正在创建一堆之前不存在的MySQL外键约束,即使在查看迁移时,所有更改的内容都是username max_length。

以下是在运行迁移时记录的一个表上运行的查询示例

ALTER TABLE `django_admin_log` ADD CONSTRAINT 
`django_admin_log_user_id_xxxxxx_fk` 
FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)

从我从1.8文档中可以看到,这些约束应该已经存在于具有用户模型外键的表中,其他表也应该使用外键。但我的数据库根本没有fk限制。

这是一个问题的原因是因为当我将它部署到生产中时,在一个巨大的表上运行ALTER TABLE导致数据库被保留(我在取消它之前取消了它,但它是超过10分钟)

知道为什么会这样吗?

如果有办法手动或更有效地做到这一点?我可以把我的网站用于维护,但如果我能做20个简单的手动命令,我真的宁愿避免它。

更新1:

运行manage.py sqlmigrate auth 0008输出:

ALTER TABLE `auth_user` MODIFY `username` varchar(150) NOT NULL;

当MySQL使用NOT NULL执行alter table时,它实际上会复制表。所以我认为正在发生的事情是表被复制,然后更新所有具有外键的表的约束。

0 个答案:

没有答案