SequelizeでDBのmigrationをする場合、sequelize-cliを利用するのが一般的だと思いますが、モジュールのデプロイ時(アプリケーション起動時)にmodel.sync()
でカラム追加(ALTER TABLE
)出来ないかなぁって思ってSequelizeのソースを眺めてたところやり方を見付けたのでメモがてら。
ちなみに、sync({force: true})
だとdrop/createなのでデータが消えるためここでは無し。
以下のようにsync()
のオプションにalter: true
を渡せばよい。
'use strict';
const Sequelize = require('sequelize');
const sequelize = new Sequelize(......);
sequelize
.sync({force: false, alter: true})
.then(....)
.catch(....);
この方法だとsequelize.define()
しているカラム全てに対してALTER TABLE
が実行される事になり、sequelize.define()
から削除されたカラムもdropされます。
また、この方法だとテーブルの最後にカラムが追加されるので、カラム順番を気にするような場合は素直にsequelize-cliを使いましょう。