Sequelize: Changing model schema on production
database-schema, javascript, orm, postgresql, sequelize.js
Solution
You want to implement Sequelize migrations:
http://docs.sequelizejs.com/manual/tutorial/migrations.html
These will enable you to transition developer, staging, and production databases between known states.
Problem
We're using the orm sequelize.js and have defined a model as such: ``` module.exports = function(sequelize, DataTypes) { var Source = sequelize.define('Source', { name: { type: DataTypes.STRING, allowNull: false, unique: true } }, { paranoid: true }); return Source; }; ``` This is deployed to production and sync'd to the database using `sequelize.sync`. Next step, we add a parameter: ``` 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; }; ``` However, when deploying to production `sequelize.sync` does not add this new parameter. This is because `sync` does a: `CREATE TABLE IF NOT EXISTS` And does not actually update the schema if the table exists. This is noted in their documentation. The only option seems to be to `{ force: true }`, however this is not okay for a production database. Does anyone know how to properly update the schema when changes are necessary?