0

Rails 3.1.0 と Ruby 1.9.2 を PostgreSQL で使用しています。巨大なファイル(〜300MB)からデータを取得してデータベースに入れたいです。ここで私はトランザクションを使用します:

File.open("./public/data_to_parse/movies/movies.list").each do |line|
  if line.match(/\t/)
    title = line.scan(/^[^\t(]+/)[0]
    title = title.strip if title 
    year = line.scan(/[^\t]+$/)[0]
    year = year.strip if year
    movie = Movie.find_or_create(title, year)
    temp.push(movie) if movie
    if temp.size == 10000
      Movie.transaction do
        temp.each { |t| t.save }
      end    
       temp =[]
    end
  end
end

しかし、生のSQLで一括挿入を使用してパフォーマンスを向上させたい:

temp.push"(\'#{title}\', \'#{year}\')" if movie
  if temp.size == 10000
   sql = "INSERT INTO movies (title, year) VALUES #{temp.join(", ")}" 
   Movie.connection.execute(sql)
   temp =[]
  end
end

しかし、「互換性のない文字エンコーディング: ASCII-8BIT および UTF-8」というエラーが表示されます。私がアクティブレコードを使用しているときは、すべて問題ありません。ファイルには、ドイツ語のウムラウトなどの文字が含まれています。ここから Rails 3 - (互換性のない文字エンコーディング: UTF-8 および ASCII-8BIT):をすべて試しましたが、役に立ちません。

どこから来たのか分かりますか?

ありがとう、

4

1 に答える 1

2

解決しました。ファイルのエンコードに問題がありました。それらはISO_8859-1にあり、iconvを介してUTF-8に変換しました。

于 2011-10-25T05:10:52.597 に答える