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.
