26

我们使用 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;
};

这被部署到生产环境并使用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;
};

但是,在部署到生产环境时sequelize.sync不会添加这个新参数。这是因为sync这样做:

CREATE TABLE IF NOT EXISTS

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

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

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

4

2 回答 2

28

你想实现 Sequelize 迁移:

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

这些将使您能够在已知状态之间转换开发人员、暂存和生产数据库。

于 2013-07-23T03:54:09.440 回答
4

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

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

于 2019-08-20T12:09:11.657 回答