Sekwencja: zmiana schematu modelu podczas produkcji
Używamy ormasequelize.js i zdefiniowali model jako taki:
module.exports = function(sequelize, DataTypes) {
var Source = sequelize.define('Source', {
name: {
type: DataTypes.STRING,
allowNull: false,
unique: true
}
}, {
paranoid: true
});
return Source;
};
Jest to wdrażane do produkcji i synchronizowane z bazą danych za pomocąsequelize.sync
. Następnym krokiem jest dodanie parametru:
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;
};
Jednak podczas wdrażania do produkcjisequelize.sync
nie dodaje tego nowego parametru. To dlatego, żesync
robi:
CREATE TABLE IF NOT EXISTS
I faktycznie nie aktualizuje schematu, jeśli tabela istnieje. To jestodnotowane w ich dokumentacji.
Jedyną opcją wydaje się być{ force: true }
, nie jest to jednak w porządku dla produkcyjnej bazy danych.
Czy ktoś wie, jak prawidłowo zaktualizować schemat, gdy konieczne są zmiany?