2013-04-11 40 views
0

我已经在我的生产服务器上的数据库表中,我创建运行db:schema:load删除现有表并创建新的?如果是,如何不删除现有的表和数据?

RAILS_ENV=production rake db:schema:load 

现在我已经创造了一些更多的迁移和正在运行分贝:模式:再次负载,但它会因为我放弃现有的表是在生产,我确实有数据呢?我可以在我的db/schema.rb文件中看到,我有

create_table“authentications”,:force => true do | t |

删除和创建表格看起来是非常危险的,有没有其他的方式来做到这一点?我正在使用postgresql

回答

1

是的,加载模式将删除所有数据。你可以简单地在你的模式中设置forcefalse,但是然后postgresql会给你一个错误,因为表已经存在并且模式将不会被加载。

这个问题真的是你想要实现的。如果您有一些迁移,为什么不直接在生产环境中运行它们?

rake db:migrate RAILS_ENV=production 

如果真的是有没有办法解决这个和你的新的模式仍与旧的支持数据,我建议你转储数据,加载架构,然后再加载数据。为此,您可以使用yaml_db

+0

谢谢@Charles,以及我已经看到了schema.db文件,它说你如果在不同的服务器上创建相同的表格,那么你最好使用schema.db而不是db:migrate虽然我当然不能丢失数据。所以db:migrate只会创建那些没有创建的表?如何只运行一个特定的迁移只是为了更安全一方? – iCyborg 2013-04-11 12:52:17

+0

迁移就像数据库结构的故事情节一样,以反映不同状态的数据库在不同的开发状态。他们不在那里填充你的数据库。如果你移动到另一台服务器,你应该只加载模式,然后使用yaml_db之类的东西将数据从旧数据库传输到新数据库。 – weltschmerz 2013-04-11 13:18:24

+0

Right Charles,我的意思是说我在本地服务器上创建了2个迁移,现在我想在服务器上复制它,我可以将迁移文件放在服务器上并运行db:migrate或者运行db:schema:load,因为我读取那db:migrate可能会破坏事情,你更喜欢哪种方法? – iCyborg 2013-04-12 06:04:13