🔥 Fast batch deletes for Active Record and Postgres
Add this line to your application’s Gemfile:
gem 'delete_in_batches'
Delete rows in batches
Tweet.where(user_id: 1).delete_in_batches
Important: Be sure to test your query before running it in production
Change the batch size
Tweet.where(user_id: 1).delete_in_batches(batch_size: 50000) # defaults to 10000
Sleep between batches
Tweet.where(user_id: 1).delete_in_batches(sleep: 0.01)
Show progress
Tweet.where(user_id: 1).delete_in_batches do
puts "Another batch deleted"
end
Works with associations
user.tweets.delete_in_batches
To delete all rows in a table, TRUNCATE
is fastest.
ActiveRecord::Base.connection.execute("TRUNCATE tweets")
View the changelog
Note: This project originally had the description “the fastest way to delete 100k+ rows with ActiveRecord” but a single DELETE
statement will likely be faster. See this discussion for more details.
Everyone is encouraged to help improve this project. Here are a few ways you can help:
- Report bugs
- Fix bugs and submit pull requests
- Write, clarify, or fix documentation
- Suggest or add new features
To get started with development:
git clone https://github.com/ankane/delete_in_batches.git
cd delete_in_batches
bundle install
bundle exec rake test