delete_in_batches
🔥 Fast batch deletes for Active Record and Postgres
Installation
Add this line to your application’s Gemfile:
gem 'delete_in_batches'How to Use
Delete rows in batches
Tweet.where(user_id: 1).delete_in_batchesImportant: 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 10000Sleep 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"
endWorks with associations
user.tweets.delete_in_batchesTo delete all rows in a table, TRUNCATE is fastest.
ActiveRecord::Base.connection.execute("TRUNCATE tweets")History
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.
Contributing
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