2

我有个问题。命令 'rake db:seed' 需要两个小时,因为 myfriends.txt 有超过 3 个 Miliionen 条目:

File.open("lib/friends_name/myfriends.txt", "r").each_line do |row|
    row = row.encode('utf-8', 'iso-8859-1').split(',')
    Friend.create(name: row[0], first_name: row[1], age: row[2], sex: row[3], address: row[4])
end

有更快的解决方案吗?我正在使用postgresql。

4

1 回答 1

1

使用 PostgreSQL 的 COPY 函数。这在我写它的时候有效,但是我已经有一段时间没有使用它了......

在不同服务器上使用 Rails 的 postgresql COPY 命令问题

重新粘贴代码:

conn = ActiveRecord::Base.connection_pool.checkout
raw  = conn.raw_connection
raw.exec("COPY tablename (col1, col2, col3) FROM STDIN")
# open up your CSV file looping through line by line and getting the line into a format suitable for pg's COPY...
rc.put_copy_data line
# once all done...
rc.put_copy_end
while res = rc.get_result do; end # very important to do this after a copy
ActiveRecord::Base.connection_pool.checkin(conn)
于 2012-11-21T17:17:56.403 回答