Postgres中Django迁移遇唯一约束已存在错误的解决方法
解决Django迁移Postgres时唯一约束已存在的问题
步骤1:连接远程Postgres数据库并查询冲突约束
首先通过psql连接到你的远程Postgres数据库:
psql -h <远程主机地址> -U <数据库用户名> -d <项目数据库名>
进入数据库后,执行以下SQL查询api_mytable表的所有唯一约束:
SELECT conname FROM pg_constraint WHERE conrelid = 'api_mytable'::regclass AND contype = 'u';
执行后会列出该表所有唯一约束的名称,其中包含导致报错的api_mytable_myfield1_myfield2_cb8c1059_uniq。
步骤2:删除冲突的唯一约束
确认目标约束后,执行SQL删除该约束:
ALTER TABLE api_mytable DROP CONSTRAINT api_mytable_myfield1_myfield2_cb8c1059_uniq;
注意:替换上述命令中的约束名为你实际查询到的冲突约束名称,避免误删其他有效约束。操作前建议备份数据库。
步骤3:重新执行Django迁移
回到项目环境,运行迁移命令即可正常执行:
python manage.py migrate
补充说明
出现此问题通常是因为之前手动创建过该唯一约束,或者某次迁移执行中断但约束已被创建,而Django的迁移记录未同步更新,导致本次迁移尝试重复创建约束。
内容的提问来源于stack exchange,提问作者Yatharth Agarwal
相关产品推荐
相关产品推荐

