Sequelize: изменение схемы модели при производстве
Мы используем 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 }
, однако это не подходит для производственной базы данных.
Кто-нибудь знает, как правильно обновлять схему, когда необходимы изменения?
Ответы
Ответ 1
Вы хотите реализовать миграцию Sequelize:
http://docs.sequelizejs.com/manual/tutorial/migrations.html
Это позволит вам осуществлять переход между базами данных разработчика, промежуточных и производственных баз данных между известными состояниями.
Ответ 2
Более быстрый способ - использовать опцию {alter: true}
.
Ref: https://sequelize.org/master/class/lib/sequelize.js~Sequelize.html#instance-method-sync