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

NestJS + TypeORM本地执行迁移提示“No migrations are pending”问题

解决TypeORM本地迁移提示“No migrations are pending”的问题

核心问题梳理

  • 全新数据库生成迁移文件后,执行migration:run提示无待执行迁移
  • 更新package.json后出现该问题,此前功能正常
  • 已将entities配置改为直接引入实体类(路径匹配时生成迁移提示无schema变更)
  • 生产环境正常,本地环境失效,尝试过迁移文件夹移至dist、先构建再执行均无效

针对性解决方案

1. 修正迁移文件路径配置

当前配置migrations: ['/migrations/*.js']是系统绝对路径,会指向系统根目录而非项目根目录的migrations文件夹,需改为项目相对路径:

// 若db.datasource.ts在项目根目录,使用__dirname定位
migrations: [__dirname + '/migrations/*.ts'],
// 或直接用项目相对路径(适配ts-node运行)
migrations: ['./migrations/*.ts'],

注:因为你使用typeorm-ts-node-commonjs直接运行TS文件,所以要匹配.ts后缀的迁移文件;若先构建再执行,则改为.js并指向dist目录下的migrations。

2. 检查数据库连接的一致性

从日志可见数据库名不一致:

query: SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'laps5' AND TABLE_NAME = 'migrations'
query: SELECT * FROM testdb.migrations migrations ORDER BY id DESC

这说明本地环境中process.env.DATABASE未正确加载,导致连接到错误数据库:

  • 验证本地.env文件中DATABASE字段的值是否为预期的库名
  • 在datasource配置中添加日志打印确认:
console.log('当前连接数据库:', process.env.DATABASE);
export const datasourceOptions: DataSourceOptions = {
  // ...其他配置
  database: process.env.DATABASE,
};

3. 确认迁移文件的有效性

TypeORM通过迁移文件名的timestamp判断是否已执行:

  • 检查迁移文件命名是否符合格式:{timestamp}-{迁移名称}.ts(如1700000000000-CreateUserTable.ts)
  • 打开迁移文件,确保up方法包含实际的SQL操作,而非空实现

4. 调整迁移执行命令参数

直接在命令中指定迁移路径,避免配置解析问题:

npm run typeorm migration:run -- -d ./db.datasource.ts -m ./migrations/*.ts

5. 排查依赖版本冲突

更新package.json后出现问题,大概率是依赖版本不兼容:

  • 对比生产环境与本地的package-lock.json,确保TypeORM、mysql2、ts-node的版本一致
  • 尝试回退TypeORM到之前的稳定版本(如从0.3.x最新版回退到0.3.17)

6. 手动检查migrations表状态

登录本地数据库,查看migrations表:

  • 若表中已存在待执行迁移的timestamp记录,TypeORM会认为该迁移已完成,可手动删除对应行后重新执行
  • 若表不存在,确认数据库连接正常后,TypeORM会自动创建该表

内容的提问来源于stack exchange,提问作者Massimiliano Oreto

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 08:59:17