2011-10-05 66 views
3

在我的Rails應用程序中,我有一個插入大量記錄的seeds.rb腳本。事實上,我正試圖加載其中的1600萬個。這需要很長時間。如何在批量加載seeds.rb之前刪除DB索引?

我想盡量加速這件事的一件事是,刪除表索引,然後重新添加它們。如果聽起來我正在做一些瘋狂的事情,請讓我知道,但這似乎是一個recommendation for bulk loading into postgres

我在遷移中使用add_index和remove_index命令,但相同的語法不能在種子.rb文件中工作。事實上,是否有可能在遷移之外做到這一點? (我想象它可能不是最好的做法,因爲它代表了架構更改)

軌v2.3.8, 的Postgres v8.4.8

回答

3

一種可能性就是在種子內的小原始SQL放縱.RB

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

在1600萬條記錄,我會建議通過原始的SQL(seeds.rb中包含如果你喜歡)管理整個事情。是否所有的1600萬條記錄都放在一張表中?應該有一些PostgreSQL的魔力來將一個文件(以PostgreSQL特定格式)批量導入到表中。

+0

PostgreSQL的[COPY](http://www.postgresql.org/docs/8.4/interactive/sql-copy.html)可能有用。 –

+0

謝謝。我已經使用了這裏顯示的原始SQL方法。是的,我最初使用的是COPY到一個表中,但我正在轉向兩個表(HABTM相關模型)設置。我現在需要在加載時在一個表中設置父ID。 –