You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

django-two-factor-auth[phonenumbers]迁移报错:表已存在

解决django-two-factor-auth迁移时two_factor_phonedevice表重复的问题

问题根源

0008_delete_phonedevice迁移本应删除two_factor_phonedevice表,但实际执行后表仍残留,导致后续自动生成的0009_initial迁移尝试重建该表时触发psycopg2.errors.DuplicateTable错误。

修复步骤

  1. 手动删除残留表
    进入你的PostgreSQL数据库命令行(替换your_db_name为实际数据库名):

    psql -d your_db_name
    

    执行SQL命令删除表:

    DROP TABLE two_factor_phonedevice CASCADE;
    

    CASCADE参数会自动处理关联的索引或约束,确保表被彻底删除。

  2. 重新执行迁移
    回到项目根目录,执行迁移命令:

    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 05:03:11