require "active_record" ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: ":memory:") ActiveRecord::Migration.class_eval do create_table(:records) do |t| t.string :column end end data = 50_000.times.map { |i| Hash[column: "Column #{i}"] } # ============================================================= data.each do |hash| insert = Arel::Nodes::InsertStatement.new insert.relation = Arel::Table.new(:records) insert.columns = hash.keys.map { |k| Arel::Table.new(:records)[k] } insert.values = Arel::Nodes::Values.new(hash.values, insert.columns) ActiveRecord::Base.connection.execute(insert.to_sql) end # Takes 20 seconds, because of 50,000 INSERT statements, since Arel doesn't support # INSERTing multiple records in a single query. This code is obviously really ugly.