Sequelize: Changing model schema on production

25,557

Solution 1

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.

Solution 2

A quicker way would be using {alter: true} option.

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

Share:
25,557

Related videos on Youtube

Matt
Author by

Matt

Updated on August 21, 2020

Comments

  • Matt
    Matt over 3 years

    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?

  • Zeeshan Jan
    Zeeshan Jan almost 9 years
    I have a question around this. I can use sequelize-cli to create a new model and its corresponding migration script using sequelize model:create which creates a model and the migration script, is there any way same can be done when adding new columns or constraints. Do we have to manually write the migration scripts for these tasks or is there any way to auto generate the migration scripts.
  • Rizwan Patel
    Rizwan Patel over 7 years
    that is the problem with sequelize we have to write manually mig scripts geez !
  • remjx
    remjx over 5 years
  • articga
    articga over 4 years
    The documentation says that it's not recommended in production: Not recommended for production use. Deletes data in columns that were removed or had their type changed in the model.
  • MortezaE
    MortezaE over 3 years
    Also there is an alter.drop option: Prevents any drop statements while altering a table when set to false