I literally couldn't decide what pun to use here: drop it like it's hot, killing me softly, or something about waiting for the (data)base to drop. Anyway, I frequently, and in every project, have this need, so this time, I will post it somewhere I won't forget it.
When I need to search for it next time, I will have solid search functionality on my blog!
When I need to search for it next time, I will have solid search functionality on my blog!
# frozen_string_literal: true namespace :db do desc "Terminate all connections to the development databases" task terminate_connections: :environment do if Rails.env.local? database_name = ActiveRecord::Base.connection_db_config.database ActiveRecord::Base.connection.execute(<<~SQL.squish) SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = '#{database_name}' AND pid <> pg_backend_pid(); SQL end end end Rake::Task["db:drop"].enhance(["db:terminate_connections"])
The important thing here is to enhance it because that ensures the order is correct. If you instead open the db:drop task and invoke the task there, it will fail because that runs after.