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

部署在AWS Elastic Beanstalk的Django应用无法写入PostgreSQL数据库

Django应用从MySQL迁移PostgreSQL后写入报错的解决方法

场景与迁移步骤

部署在AWS Elastic Beanstalk上的Django应用,原本连接MySQL RDS实例,按以下步骤迁移至PostgreSQL RDS:

  • 连接PostgreSQL实例,执行python manage.py migrate
  • 执行python manage.py sqlflush,并运行生成的SQL命令
  • 从MySQL导出contenttypes的JSON fixture:
    python manage.py dumpdata contenttypes --indent=4 --natural-foreign > contenttype.json
    
    再导入PostgreSQL:
    python manage.py loaddata contenttype.json
    
    此步骤保留了主键(PK)和外键(FK)关联
  • 使用AWS DMS完成MySQL到PostgreSQL的数据迁移

问题现象

  • Django应用(如后台管理)可正常读取PostgreSQL中的数据,但尝试写入时触发500错误
  • 排除AWS安全配置问题(能读取但无法写入不符合权限限制的特征)
  • 使用相同连接参数通过pgAdmin 4连接数据库时,执行INSERT语句必须显式指定主键值才能成功写入

问题根源与解决方法

问题出在PostgreSQL的主键序列上:迁移后多张表的主键序列当前值被重置为1,当Django尝试自动生成主键时,会与已存在的主键值冲突,导致写入失败。

解决方法是找到各表ID(主键)的最大值,更新对应序列的当前值,让序列从最大值+1的位置开始生成新主键。具体可通过PostgreSQL语句批量或逐个更新序列,确保序列值始终大于现有主键的最大值。


内容的提问来源于stack exchange,提问作者Oliver Burdekin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 02:31:08