db:schema:load删除现有表并创建新表吗?如果是,如何不删除现有的表和数据?

时间:2013-04-11 09:30:47

标签: ruby-on-rails ruby-on-rails-3

我在生产服务器上的数据库中已经有表格,我是通过运行

创建的
RAILS_ENV=production rake db:schema:load

现在我已经创建了一些迁移并希望再次运行db:schema:load但是它会丢弃现有表,因为我正在生产并且我确实有数据吗?我可以在我的db / schema.rb文件中看到,我有

create_table“authentications”,:force =>真的做| t |

删除和创建表格看起来风险极大,有没有其他方法可以做到这一点?我正在使用postgresql

1 个答案:

答案 0 :(得分:2)

是的,加载架构将删除所有数据。您可以在架构中简单地将force设置为false,但是postgresql会给您一个错误,因为该表已经存在且架构将不会被加载。

问题实际上是你想要实现的目标。如果您有一些迁移,为什么不在生产环境中运行它们呢?

rake db:migrate RAILS_ENV=production

如果真的没办法解决这个问题并且您的新架构仍然支持旧架构的数据,我建议您转储数据,加载架构,然后再次加载数据。为此,您可以使用yaml_db