使用 Sequelize 在生产环境中更改模式而不丢失数据

Making schema changes in production environment with Sequelize with no data loss

我正在使用 Sequelize 作为我的 PostgreSQL 数据库的 ORM,并且需要一些关于在生产中更改模式而不丢失数据的指示:

// model usage
var User = require('./user')
var Page = require('./page')
var Theme = require('./theme')

User.sync({
    force: true
})

Page.sync({
    force: true
})

Theme.sync({
    force: true
})

在开发中,每次重新启动 API 服务器时都会丢失数据,因为我有 force: true。这是可管理的,因为它是发展。 但是我显然不希望我的生产环境使用这个,但是我该如何解决这个问题:

  1. 我有一个用户的架构:姓名、年龄等...
  2. 一个用户注册
  3. 然后我决定我也想捕获 "email" 并将其保存在用户的 table 中。
  4. 未找到第 "email" 列,因为 force: false 在生产中

如何确保我的生产架构是最新的?我可以在不丢失数据的情况下更改这些模式吗?

我来自 Mongo 世界,在那里这不是问题,欢迎任何建议!

在 SQL 世界中,迁移是必经之路。 您需要编写迁移以在 table.

中添加电子邮件列

如果您使用的是 Sequelize >= 2.0.0 ,那么您可以使用它自己的迁移库:http://docs.sequelizejs.com/en/latest/docs/migrations/