2

Railsでは、「サニタイズ」して直接SQL呼び出しでデータベースに挿入したハッシュがあります。
レコードを読み取るには、アクティブなレコードを使用する必要があります。ただし、そのフィールドにシリアライズ値が設定されていますが、フィールドを文字列として読み取っています。

データを挿入する方法は次のとおりです

def self.update_records(iFileName, iHashArray)
    return false if(rows.size == 0)  
    return false if(killed?)
    p "Pushing hash.size = #{rows.size}" 
    next_id = adjust_sequence( rows.size) #this reserves the record ids. explicit out paces the autosequence
    records = iHashArray.each_with_index.map { |hash, index|  "\r\n(#{next_id + index}, #{sanitize(hash)})" }
    sql = wrapWithSQL(UPLOAD_ID, sanitize(iFileName), records.join(", "));
    connection.execute(sql);
    adjust_sequence(1);
    return true
  end

  def self.wrapWithSQL(iUploadId, iFileName, iSql)
     sql = "WITH new_values (id, hash_value) as ( values #{iSql} )"+
           "\r\nINSERT INTO upload_stages (id, hash_value, upload_id, status,file_name, created_at, updated_at)"+
           "\r\nSELECT id, hash_value, #{iUploadId}, 1,  #{iFileName}, current_timestamp, current_timestamp FROM new_values  returning id";
end

値を読み取るためのアクティブなレコード クラス

class UploadStage < ActiveRecord::Base
  serialize  :hash_value, Hash

  #...
end

現在、私のWindowsボックスでは正常に動作しています。そして、過去数か月間、ハッシュが問題なく出力されるのを見てきました。
heroku ではデータベースから文字列として出力されますが、私のコードは、ハッシュが必要なときに文字列をどう処理するかを理解できません。

これに立ち向かう方法を知っている人はいますか?
注...生のSQLを使用してデータベースにプッシュするのは、一度に5000レコードをプッシュしているためです。SQL を変更することはできますが、アクティブ レコードは必要な速度をサポートしていないため、SQL でプッシュできる必要があります。

4

0 に答える 0