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

DRF项目CI测试报错relation does not exist 本地单元测试可通过

你遇到的relation does not exist报错大概率是CI测试运行逻辑和本地环境存在差异导致,而非Postgres本身的问题,可按照以下方向排查:

常见触发原因

  • 迁移文件未提交到远程仓库:本地生成的migrations文件没有随代码push到分支,CI拉取的代码缺失对应表的建表迁移逻辑,测试库初始化时无法创建对应表
  • CI脚本遗漏迁移执行步骤:本地测试前你手动执行过迁移操作,但CI配置的测试流程中没有加入python manage.py migrate步骤,全新的测试库未完成建表就直接跑用例
  • 本地开发库存在非迁移生成的表:你本地开发过程中可能手动建过表、或者修改过迁移记录,本地库能找到对应表,但CI从零初始化数据库时完全依赖迁移文件,就会出现表缺失
  • 测试代码存在提前执行的数据库操作:如果你的测试用例在模块层、测试类的类属性位置直接调用了数据库查询语句,这部分代码会在Django执行测试库迁移前运行,直接触发表不存在报错

排查方案

  • 对比本地migrations目录和远程仓库对应目录的文件,确认所有新增的迁移文件都已提交
  • 查看CI流程的执行日志,确认测试运行前是否正常执行了迁移步骤,可在CI测试命令前增加python manage.py makemigrations --check校验迁移文件完整性
  • 本地新建一个空白Postgres数据库,使用和CI一致的依赖版本,从头执行迁移并运行测试,不要使用平时开发用的旧数据库,即可复现CI环境的报错
  • 检查所有测试代码,确认没有在setUp方法之外的位置直接执行数据库操作

内容的提问来源于stack exchange,提问作者Rain Wu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:45:03