标签: umzug

Sequelize 中模型和迁移定义之间的主要区别是什么?

一些 SQL 数据库的 Sequelize 用户sync({ force: true })在早期经常使用,然后切换到迁移。我很困惑,因为迁移和模型似乎具有相似的语法,但也有一些似乎没有被强烈强调的差异。

一些观察(可能是错误的):

  • 两者中的选项对象不同:options.indexes模型中的对象在迁移中不起作用(但在模型中起作用)
  • 自定义索引名称 usingunique: 'somename'不适用于迁移字段属性(但适用于模型);但unique: true两者都适用
  • 需要显式创建外键 -references需要在迁移中设置a (但在模型中,hasMany/belongsTo 会自动生成外键字段和外键引用)
  • idcreatedAt并且updatedAt必须在迁移中手动创建,而不是模型

最后两个是有道理的,因为它描述了迁移责任(设置 db 架构)与模型 - 但是迁移支持什么/它如何工作对于类似的项目似乎不同,并且该sync选项加​​剧了我的困惑。

一些问题:

  • Sequelize 中的迁移和模型之间需要记住的主要区别是什么(不是两者之间的一般哲学)?在什么型号的选项(使用时sync选择)的迁移工作?
  • 在从sync离散迁移切换到迁移时,其他人是否只是将模型文件复制到迁移中?您是否删除了仅适用于模型的部分无关信息?只适用于迁移?

javascript node.js sequelize.js umzug

6
推荐指数
0
解决办法
852
查看次数

在Sequelize迁移中承诺链接 - 关系不存在

这个简单的测试代码:

return queryInterface.createTable('tadam', {id: Sequelize.INTEGER, humus: Sequelize.STRING(255)})
      .then(queryInterface.sequelize.query('ALTER TABLE tadam ADD PRIMARY KEY (id)'));
Run Code Online (Sandbox Code Playgroud)

返回以下错误:

Unhandled rejection SequelizeDatabaseError: relation "tadam" does not exist
Run Code Online (Sandbox Code Playgroud)

现在,据我所知,当第二个承诺(关于改变表格)被执行时,该表尚未创建.

这可能不是因为迁移中的所有查询都是一次执行的,因为我有这个测试迁移:

return queryInterface.sequelize.query('ALTER TABLE tadam DROP CONSTRAINT tadam_pkey')
  .then(queryInterface.removeIndex('tadam', 'tadam_pkey'));
Run Code Online (Sandbox Code Playgroud)

它工作正常.

那么,任何人都可以解释为什么第一个不起作用以及如何实现它,以便创建表+添加PK可以从单个迁移执行?

sequelize.js umzug sequelize-cli

3
推荐指数
1
解决办法
2142
查看次数

使用 postgres 和 umzug 时如何为续集迁移定义默认架构?

我试图始终使用 sequelize 和 umzug 运行迁移到特定的 postgresql 数据库模式。让我们称之为custom模式。默认情况下,所有查询都转到public架构。 有什么方法可以定义默认模式以在 sequelize 或 umzug 中运行所有迁移?

背景:

使用以下代码,我可以为迁移中的单个查询定义架构:

// schema defined according to https://sequelize.readthedocs.io/en/latest/docs/migrations/
module.exports = {
  up: async (queryInterface, Sequelize) => {
    return Sequelize.transaction(async transaction => {
      await queryInterface.renameTable({ tableName: 'oldtablename', schema: "custom"}, 'newtablename', { transaction })
    })
  },

  down: async () => {
  }
}
Run Code Online (Sandbox Code Playgroud)

它报告它成功并使用正确的模式:

Migration {
  path:
   'path/to/migrations/migration_test.js',
  file: 'migration_test.js',
  options:
   { storage: 'sequelize',
     storageOptions: [Object],
     logging: [Function: bound consoleCall],
     upName: 'up',
     downName: 'down', …
Run Code Online (Sandbox Code Playgroud)

postgresql sequelize.js umzug

3
推荐指数
1
解决办法
2736
查看次数

webpack 捆绑后如何解析迁移文件夹的路径

我需要将迁移文件夹的路径传递给 Umzug 配置,但它正在被 webpack 压缩,这可以吗?

我尝试单独捆绑每个迁移文件,但 Umzug 说它找不到 method up()

    let umzug = new Umzug({
      storage: 'sequelize',

      storageOptions: {
        sequelize: sequelize
      },

      migrations: {
        params: [
          sequelize.getQueryInterface(),
          Sequelize
        ],
        path: './../db/migrations/*')
      }
    })
Run Code Online (Sandbox Code Playgroud)

当我尝试手动运行从 webpack 编译的它们时,它说 no method up()

sequelize.js typescript webpack umzug

2
推荐指数
1
解决办法
1408
查看次数

顺序化umzug迁移

我正在使用sequelize js和开发一个node js application,将其部署到生产环境并具有实时数据库。

而在发展模式下,如果我需要alterDB,我以前用做它Sequelize.sync({ force: true })和它的工作好。

但是现在,开发完成后,我想更改表并向其中添加列。

我搜索了许多帖子,但没有获得有关如何运行这些迁移的确切示例。

我尝试使用Umzug并运行迁移,但是这使我出错。

这是我尝试的代码,

migrations / barmigration.js:

  var Sequelize = require('sequelize');

"use strict";

module.exports = {

    up: function(migration, DataTypes) {
      return [
      migration.addColumn(
        'Bars',
        'PrinterId',
        Sequelize.STRING
      ),
      migration.addColumn(
        'Bars',
        'PrinterStatus',
        Sequelize.STRING
      )]

    },

    down: function(migration, DataTypes) {
        return
         [
            migration.removeColumn('Bars', 'PrinterStatus'),
            migration.removeColumn('Bars', 'PrinterId')
        ]
    }

};
Run Code Online (Sandbox Code Playgroud)

这是umzug configuration

 var Umzug = require('umzug');
    var sequelize = require('sequelize');

    var …
Run Code Online (Sandbox Code Playgroud)

node.js sequelize.js umzug

1
推荐指数
1
解决办法
2985
查看次数