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

PostgreSQL迁移旧库数据至新库后ID冲突问题(Django项目)

解决Django迁移数据后主键自增起始值问题

迁移带主键ID的旧数据到新数据库后,数据库的自增计数器未同步到最后一个ID,导致新增对象时出现ID冲突。以下按不同数据库类型给出解决步骤:

PostgreSQL

  1. 查询目标表的最大主键ID:
SELECT MAX(id) FROM your_app_yourmodel;
  1. 获取表对应的自增序列名(Django默认命名为表名_id_seq):
SELECT pg_get_serial_sequence('your_app_yourmodel', 'id');
  1. 重置序列起始值为最大ID+1:
ALTER SEQUENCE your_app_yourmodel_id_seq RESTART WITH (SELECT MAX(id) + 1 FROM your_app_yourmodel);

MySQL/MariaDB

  1. 查询目标表的最大主键ID:
SELECT MAX(id) FROM your_app_yourmodel;
  1. 修改表的自增起始值(将101替换为查询到的最大ID+1):
ALTER TABLE your_app_yourmodel AUTO_INCREMENT = 101;

SQLite

SQLite通过sqlite_sequence表管理自增计数器,操作步骤如下:

  1. 查询目标表的计数器记录:
SELECT * FROM sqlite_sequence WHERE name='your_app_yourmodel';
  1. 更新计数器值(将101替换为查询到的最大ID+1):
UPDATE sqlite_sequence SET seq=101 WHERE name='your_app_yourmodel';
  1. 如果表不在sqlite_sequence中,直接插入记录:
INSERT INTO sqlite_sequence (name, seq) VALUES ('your_app_yourmodel', 101);

验证操作

执行完数据库命令后,可通过Django shell测试:

python manage.py shell

在shell中创建对象并检查ID:

from your_app.models import YourModel
new_obj = YourModel.objects.create(字段名=值)
print(new_obj.id)  # 输出应为迁移数据的最大ID+1

内容的提问来源于stack exchange,提问作者نور محمد

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 04:49:59