Sequelize:改变生产模型架构

Mat*_*att 20 javascript postgresql orm database-schema sequelize.js

我们正在使用orm sequelize.js并定义了一个模型:

module.exports = function(sequelize, DataTypes) {
    var Source = sequelize.define('Source', {
        name: {
            type: DataTypes.STRING, 
            allowNull: false, 
            unique: true
        }
    }, {
        paranoid: true
    });

    return Source;
};
Run Code Online (Sandbox Code Playgroud)

这将部署到生产环境并使用同步到数据库sequelize.sync.下一步,我们添加一个参数:

module.exports = function(sequelize, DataTypes) {
    var Source = sequelize.define('Source', {
        name: {
            type: DataTypes.STRING, 
            allowNull: false, 
            unique: true
        }, 
            location: {
                    type: DataTypes.STRING
            }
    }, {
        paranoid: true
    });

    return Source;
};
Run Code Online (Sandbox Code Playgroud)

但是,部署到生产时sequelize.sync不会添加此新参数.这是因为sync:

CREATE TABLE IF NOT EXISTS

如果表存在,实际上并不会更新架构.这在他们的文档中有说明.

唯一的选择似乎是{ force: true },但这对于生产数据库来说是不可行的.

有人知道如何在需要更改时正确更新架构吗?

Dan*_*ohn 24

您想要实施Sequelize迁移:

http://docs.sequelizejs.com/manual/tutorial/migrations.html

这些将使您能够在已知状态之间转换开发人员,登台和生产数据库.

  • 这是sequelize的问题,我们必须手动编写mig脚本geez! (3认同)
  • 你救了我的一天! (2认同)

Sar*_*aro 5

更快的方法是使用{alter: true}选项。

参考: https: //sequelize.org/master/class/lib/sequelize.js~Sequelize.html#instance-method-sync

  • 文档说不建议在生产中使用:`不建议用于生产使用。删除模型中已删除或类型​​已更改的列中的数据。 (3认同)