Skip to content

Instantly share code, notes, and snippets.

@silasjmatson
silasjmatson / database_query_streaming.rb
Last active June 14, 2017 18:37
Ruby Module to stream a SQL query to standard out, and yield each row to a block
module DatabaseQueryStreaming
def stream_query_rows(sql_query, options="WITH CSV HEADER")
conn = ActiveRecord::Base.connection.raw_connection
conn.copy_data "COPY (#{sql_query}) TO STDOUT #{options};" do
while row = conn.get_copy_data
yield row
end
end
end
class ApplicationRecord < ActiveRecord::Base
extend DatabaseQueryStreaming
self.abstract_class = true
end
class SalesReportsController < AdminController
include ActionController::Live
def export
respond_to do |format|
format.csv { stream_csv_report }
end
end
private