如何在seeds.rb中批量加载之前删除DB索引?

时间:2011-10-05 11:41:55

标签: ruby-on-rails postgresql activerecord

在我的rails应用程序中,我有一个seed.rb脚本,可以插入大量记录。事实上,我正在尝试加载1600万个。这需要很长时间。

我想尝试加快这一点的一件事是删除表索引并在之后重新添加。如果听起来我正在做一些疯狂的事情,请告诉我,但这似乎是一个recommendation for bulk loading into postgres

我在迁移中使用add_index和remove_index命令,但相同的语法在seeds.rb文件中不起作用。事实上,迁移之外是否可以这样做? (我想象它可能不是最佳实践,因为它代表了架构更改)

rails v2.3.8, postgres v8.4.8

1 个答案:

答案 0 :(得分:3)

一种可能性就是在seeds.rb中沉迷于一点原始SQL。

ActiveRecord::Base.connection.execute("DROP INDEX myindex ON mytable")

在1600万条记录中,我建议通过原始SQL管理整个事情(如果你愿意,可以包含在seeds.rb中)。所有1600万条记录都放在一张桌子上吗?应该有一些PostgreSQL魔法将文件(以PostgreSQL特定格式)批量导入表中。