Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Спасибо, было интересно.
conn = ActiveRecord::Base.connection.raw_connection
conn.exec("DECLARE report_data CURSOR FOR #{sql}")
loop do
data_chunk = conn.exec("FETCH FORWARD 10000 FROM report_data")
data_chunk.type_map = PG::BasicTypeMapForResults.new(conn)
data_chunk.each do |row|
... магия вроде интернационализации и т.п...
csv << processed_row
end
data_chunk.clear
# Закомментарено, т.к. если достали все данные, база сама закрывает курсор.
# conn.exec("CLOSE report_data;")
end
Оптимизируем память Rails сервиса (реальный кейс)