节点js的模式和数据迁移

时间:2015-09-09 06:40:55

标签: node.js postgresql sequelize.js

是否有任何工具与 Django Souh 类似,但对于Node?

Noe我正在与Sequelize合作,如果我做对了,Sequelize没有选择根据现有模型创建迁移文件。 因此,创建新模型/表的步骤是:

  • 使用sequelize model:create <model meta>创建模型。
  • 编辑生成的迁移文件 - 添加用于创建表的实际代码 在up部分下的数据库中。
  • 使用sequelize db:migrate运行迁移。

我正在寻找可以基于现有模型创建迁移文件的东西,这类似于South可以为Django做的事情。

有没有选择?

3 个答案:

答案 0 :(得分:1)

TypeORM支持基于模型的迁移。它可以将数据库直接同步到模型,也可以创建迁移文件。

我认为prisma是另一种选择。似乎不那么受欢迎,但这是一个很有前途的。

无论哪种方式,都没有可靠的工具可笑。过去几年,我一直在django和.net项目中工作,使用它们创建迁移非常容易。但是,当您尝试将node.js用于后端时,会遇到很多问题。

我正在使用sequelize,当我看到没有正式的方法可以从模型创建自动迁移时,我放弃了使用它。根据我的经验,使用手动编写的迁移来维护模型变得非常困难。

现在我唯一的选择是TypeORM,这使我很烦,如果TypeORM不再维护或者我想使用其他库等,别无选择。

我正在认真考虑将node.js用作后端。但是,有很多好的工具可以创建与现代前端工具(如Next.js)集成的项目,找到一个好的orm是一个大问题。

答案 1 :(得分:0)

与Sequelize最接近的是 Sequelize Auto Migrations

它允许您进行如下所示的迭代循环:

  1. 手动创建或更新模型或使用sequelize-cli
  2. 运行makemigrations以自动生成updown迁移
  3. 必要时重复

虽然这非常有帮助,但我发现某些关键领域缺少它:

  1. 向下迁移可能创建不正确。因此,它可能会在删除依赖表之前尝试删除该表。
  2. 围绕多字段索引的某些配置无法正确输出。

currently 10 outstanding PRs,因此似乎有一些其他的贡献者正在尝试使其更易于生产……但是我还没有找到像Django Migrations(以前是Django South)一样干净,可靠的东西。 )。

答案 2 :(得分:0)

看看https://typeorm.io/#/migrations/generating-migrations。我和4年前的情况一样。

我的选择:

  • 水线仅用于ORM和差异工具(如dbdiff),以使文件与新模式(通过使用“ drop”的水线迁移生成)和生产模式有所不同。使用该输出,您可以在安全模式下逐个查询地运行查询。
  • 上一个选项以及knex迁移。但是您必须制作自己的迁移文件。 Knex没有要比较的架构文件,但是有一个请求功能https://github.com/knex/knex/issues/1086
    • 使用风帆,但改变水线以使水准线均匀,并尝试使用@paulmest答案。
    • 使用帆,但将水线更改为自动生成的用法。