我之前使用
npm run migration:generate <filename>
将一列添加到现有表中。
但是,我后来意识到我拼错了列名,所以我想重命名该列。 (showCommission -> showCommission)
由于只是在本地环境,所以我修改了迁移文件上的列名并运行
npm run migration:run
。
发生重复迁移错误,这是日志。
**addShowCommissionToCorporationProfile1643792138368 是修改后的导出类名。
typeorm 迁移:运行
查询:SELECT * FROM
.INFORMATION_SCHEMA
WHERECOLUMNS
= 'abc' ANDTABLE_SCHEMA
= '迁移'TABLE_NAME
查询:SELECT * FROM
.abc
migrations
ORDER BYmigrations
DESCid
迁移运行期间出错:
错误:重复迁移:addShowCommissionToCorporationProfile1643792138368at MigrationExecutor.checkForDuplicateMigrations at MigrationExecutor.getMigrations at MigrationExecutor.<anonymous> at step at Object.next at fulfilled at processTicksAndRejections npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! [email protected] migration:run: `typeorm migration:run`
npm 错误!退出状态 1 npm ERR! npm 错误!失败于 [电子邮件受保护] 迁移:运行脚本。 npm 错误!这可能不是问题 npm。上面可能有额外的日志输出。
之后我尝试恢复
npm run migration:revert
,但出现了完全相同的错误。因此,我将迁移文件更改回其初始状态,并使用 npm run migration:generate --filename
创建迁移文件以重命名列,但仍然出现相同的错误。
最后,我删除了新创建的迁移文件并仅运行原始迁移文件(初始状态)并再次运行迁移,但仍然出现相同的错误。
任何人都可以告诉我如何解决这个混乱吗?
我只是想重命名该列...
如果您需要任何其他信息或有关情况的更多说明,请告诉我。
感谢您的所有帮助。
我在 NestJS 项目上遇到了同样的错误。我的解决方案是删除 dist 文件夹,然后重建项目,然后我可以运行新的迁移。
说明:我们最近刚刚更改了项目结构,并将迁移移至不同的文件夹。然而,Nest 有一个奇怪的“bug”:当我们移动文件时,它会重建我们移动文件的项目部分,但不一定是我们删除文件的项目部分。因此在这种情况下会出现重复迁移。当我们重建整个东西时,构建中不再有重复的迁移。
我遇到了类似的问题,并且对这个问题缺乏谷歌结果感到惊讶。
我也将它用于 NestJS 应用程序,但删除
dist
文件夹并再次运行构建(如其他答案中的建议)没有帮助。
事实证明,原因是我在迁移文件夹中使用了索引文件,除了迁移文件本身之外,该索引文件还导出了迁移。因此,当 TypeORM 扫描项目的迁移时(如果您为迁移文件提供正则表达式),它会导入两次 - 从迁移本身和索引文件。
因此,对于这样的情况,您有 2 个选择:
index.ts
migrations
选项的值以使用 path/to/migrations/index.{ts,js}
而不是文件名中带有 *
的正则表达式。在这种情况下,您还需要确保将新迁移添加到索引文件中。我执行 npm run build 并解决了问题。
使用 TypeScript 迁移文件并
typeorm-ts-node-commonjs
运行它们时,将生成 .js
文件。这会导致数据源路径(例如 **/migrations/*.{js,ts}
)因重复迁移错误而失败,因为 glob 同时命中 .js
和 .ts
文件。
补救措施是从路径规范中删除
.js
文件。例如,**/migrations/*.ts
。