【问题标题】:Are migrations really needed in NodeJS Sequelize?NodeJS Sequelize 真的需要迁移吗?
【发布时间】:2020-03-01 19:23:48
【问题描述】:

在 Sequelize 中,当我们使用以下命令创建模型时,

sequelize model:generate --name Company --attributes name:string, desc:text

还会创建一个迁移文件。我们可以通过添加以下代码使模型与数据库同步。

models.sequelize.sync().then(() => {
    console.log("DB Synced");
}).catch((error) => {
    console.log(error);
});

因此,当列名或其他内容发生更改时,它们会与数据库同步。

那么,我们真的需要运行迁移吗?在开发或生产中的任何时候?

如果我错了,请纠正我。

【问题讨论】:

  • 更新 sequelize 模型也需要将更新应用到数据库。您打算如何更新数据库?例如,如果您在模型中添加“公司”列,则您希望数据库也具有该列。您可以在数据库中手动添加它(不好的做法),或者使用迁移文件对数据库修改进行版本化,例如在此处使用sequelize.sync()
  • @DamienLeroux 在这种情况下,我可以创建一个单独的迁移来添加该列。这有效吗?
  • 不,创建迁移不是强制性的,我在大型应用程序上工作了很长时间,我不使用本地方式进行迁移。您可以在没有 cli 的情况下创建模型,并通过您想要的方式对其进行管理...
  • @TharinduLucky 是的,它是有效的。

标签: node.js database model sequelize.js database-migration


【解决方案1】:

我强烈建议在 sequelize 配置中使用显式迁移和指向表来存储应用的迁移和种子,以防您在不同的生产环境中有不同版本的数据库(即使您只是计划不同的生产部署)。 如果您在较旧的生产数据库上运行具有某些模型更改的较新版本的应用程序,那么通过执行 sync 方法您会意外更改此生产数据库。此外,您无法轻易撤消这些更改,因为您对当前应用程序中的模型与生产数据库中的表之间的差异一无所知。

【讨论】:

  • 那么,DB 同步不一定非得在 app.js 中添加吧?
  • 是的。您可以通过执行 sequelize db:migrate 和 sequelize db:seed:all 来应用所有未应用的迁移和种子
猜你喜欢
  • 2018-06-11
  • 1970-01-01
  • 2017-06-26
  • 1970-01-01
  • 1970-01-01
  • 2017-06-09
  • 2012-08-21
  • 2021-09-27
  • 2021-07-12
相关资源
最近更新 更多