【问题标题】:What happens if I delete a record from the typeorm migration table?如果我从 typeorm 迁移表中删除一条记录会发生什么?
【发布时间】:2022-06-30 15:27:14
【问题描述】:

TypeORM创建的迁移表是如何使用的?

首先,我想它是用来跟踪数据库中已经执行的所有迁移。

如果我要删除一个迁移文件,手动执行撤消迁移的“向下”查询,以及从迁移(或任何migrationTableName 设置的)表中删除其关联记录,会不会像从一开始就没有迁移?

【问题讨论】:

  • 有人试过吗?它会破坏 typeorm 吗?
  • Typeorm 使用该表来跟踪哪些迁移不会再次运行。因此,如果您有要删除其记录的非幂等迁移,则会导致问题。

标签: postgresql database-migration typeorm


【解决方案1】:

migrations 表被 typeorm 用来跟踪哪些迁移已经运行,因此它会跳过它们并只运行较新的迁移。

如果从该表中删除一条记录,则下次执行 typeorm migration:run 时,与该已删除记录关联的迁移将再次运行,如果它仍然存在于代码库中。

一旦我能够再次找到它,我将使用源更新答案,但是我在提交我的代码之前在本地测试迁移时也使用过几次(运行typeorm migration:run,删除@987654324 中的记录@,运行 typeorm migration:run 并再次看到已删除的迁移运行)。

奖励内容: 在这种情况下,我们进行了一次昂贵的迁移,该迁移在本地运行良好,提交并在沙盒环境中成功运行,但在生产环境中尝试时会导致死锁并失败(表大小要大得多)。

我们决定恢复引入迁移的提交,重写它,然后再次尝试。

由于某些我不会进入的原因,我们不得不手动执行 SQL 来撤消沙盒中的迁移,但我们决定让 migrations 表中的记录成为(另一个同名迁移仍然有附加了不同的时间戳,因此是唯一的名称),因为我们认为将其留在那里没有害处,并且它还可以防止此迁移再次运行,以防有人弄乱了 git 历史并无意中在代码库中再次引入了该迁移。但是,我确实相信typeorm migration:revert 在还原时确实会删除与上次运行迁移相关的记录。

【讨论】:

    猜你喜欢
    • 2018-02-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 2019-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    相关资源
    最近更新 更多