DB で何百万もの行を更新するという問題があるため、それぞれを個別に更新するのではなく、約 1000 ステートメントのグループを単一のクエリに結合したいと考えています。
私はそのようにMULTI_STATEMENTSを有効にしました
client = Mysql2::Client.new(:host => 'localhost', :database => 'mehdb', :username => "root", :password => "", :flags => Mysql2::Client::MULTI_STATEMENTS)
これが私が実行しているコードの例です
sql = "SELECT id, x FROM pew WHERE x IS NULL LIMIT 1000"
results = db_read.query(sql)
while results.count > 0
updates = ''
results.each do |r|
updates += "UPDATE pew SET x = 10 WHERE id = #{r['id']};"
end
db_write.query(updates) unless updates.empty?
results = db_read.query(sql)
end
この作業は、最初の実行中は問題ありませんが、2 番目の一連の更新を起動すると、このエラー メッセージが表示されます。
`query': Commands out of sync; you can't run this command now (Mysql2::Error)
誰もこれに遭遇したことがありますか?または、別のアプローチに関するアドバイスはありますか?