django-two-factor-auth[phonenumbers]迁移报错:表已存在
解决django-two-factor-auth迁移时
two_factor_phonedevice表重复的问题 问题根源
0008_delete_phonedevice迁移本应删除two_factor_phonedevice表,但实际执行后表仍残留,导致后续自动生成的0009_initial迁移尝试重建该表时触发psycopg2.errors.DuplicateTable错误。
修复步骤
手动删除残留表
进入你的PostgreSQL数据库命令行(替换your_db_name为实际数据库名):psql -d your_db_name执行SQL命令删除表:
DROP TABLE two_factor_phonedevice CASCADE;CASCADE参数会自动处理关联的索引或约束,确保表被彻底删除。重新执行迁移
回到项目根目录,执行迁移命令:python manage.py migrate two_factor此时0009_initial迁移会正常创建新的
two_factor_phonedevice表,迁移流程完成。
额外排查(可选)
如果0008迁移执行异常,可检查迁移文件two_factor/migrations/0008_delete_phonedevice.py的内容,确认是否包含正确的删除逻辑:
from django.db import migrations class Migration(migrations.Migration): dependencies = [ ('two_factor', '0007_auto_xxxx_xx_xx'), ] operations = [ migrations.DeleteModel( name='PhoneDevice', ), ]
若逻辑无误,大概率是数据库事务未正常提交导致表未删除,手动删除后重新迁移即可解决。
内容的提问来源于stack exchange,提问作者swiss_knight
相关产品推荐
相关产品推荐

