使用 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
。这是可管理的,因为它是发展。
但是我显然不希望我的生产环境使用这个,但是我该如何解决这个问题:
- 我有一个用户的架构:姓名、年龄等...
- 一个用户注册
- 然后我决定我也想捕获 "email" 并将其保存在用户的 table 中。
- 未找到第 "email" 列,因为
force: false
在生产中
如何确保我的生产架构是最新的?我可以在不丢失数据的情况下更改这些模式吗?
我来自 Mongo 世界,在那里这不是问题,欢迎任何建议!
在 SQL 世界中,迁移是必经之路。
您需要编写迁移以在 table.
中添加电子邮件列
如果您使用的是 Sequelize >= 2.0.0 ,那么您可以使用它自己的迁移库:http://docs.sequelizejs.com/en/latest/docs/migrations/
我正在使用 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
。这是可管理的,因为它是发展。
但是我显然不希望我的生产环境使用这个,但是我该如何解决这个问题:
- 我有一个用户的架构:姓名、年龄等...
- 一个用户注册
- 然后我决定我也想捕获 "email" 并将其保存在用户的 table 中。
- 未找到第 "email" 列,因为
force: false
在生产中
如何确保我的生产架构是最新的?我可以在不丢失数据的情况下更改这些模式吗?
我来自 Mongo 世界,在那里这不是问题,欢迎任何建议!
在 SQL 世界中,迁移是必经之路。 您需要编写迁移以在 table.
中添加电子邮件列如果您使用的是 Sequelize >= 2.0.0 ,那么您可以使用它自己的迁移库:http://docs.sequelizejs.com/en/latest/docs/migrations/