【发布时间】:2018-01-17 07:22:14
【问题描述】:
在我的应用程序中,我有一个 City 模型。我有一个 sql 文件,其中包含世界上所有的城市(超过 270 万),我需要将所有城市播种到我的生产服务器。
我知道我通常可以在seeds.rb 中做到这一点:
cities = City.create([
{id: 1, name: 'Bombuflat', state_id: 1},
{id: 2, name: 'Garacharma', state_id: 1},
{id: 3, name: 'Port Blair', state_id: 1},
// Other cities
])
但由于这是要播种的大数据,因此在每行添加id、name、state_id 需要很长时间。
现在我的cities.sql 有一系列城市,例如:
//id, state_id, name
(1, 1, 'Aixàs'),
(2, 1, 'Aixirivali'),
(3, 1, 'Aixirivall')
最好的方法是什么,所以我不需要在每一行添加id、name、state_id,也许可以使用我已经拥有的数组。
【问题讨论】:
-
为什么不将 SQL 转储到生产数据库中而不是通过 Rails 执行?
-
老实说,我不认为应该使用 ActiveRecord 插入这么多数据来进行播种。使用工具将数据批量插入到数据库中。 MySQL 中的
LOAD DATA INFILE可以在几秒钟内使用适度驱动的数据库完成此操作。 -
@Bustkiller 因为在我的生产中我使用 postgresql
-
尝试使用 CSV 和
PostgreSQL's COPY。它是用于快速数据转储/加载。 -
@PavelMikhailyuk 你能否举个例子回答一下,这样我就可以理解并为未来遇到同样问题的人提供帮助。欣赏它
标签: arrays ruby ruby-on-rails-4 seeding