Last Updated: February 25, 2016
·
1.104K
· trekdemo

How to drop all database connections to a PostgreSQL database

Gist

namespace :db do
  desc 'Drop all database connections'
  task :drop_connections => :environment do
    database = Rails::Application.config.database_configuration[RAILS_ENV]["database"]
    field    = if ActiveRecord::Base.connection.send( :postgresql_version ) < 90200
                 'pg_stat_activity.procpic' # PostgreSQL <= 9.1.x
               else
                 'pg_stat_activity.pid'     # PostgreSQL >= 9.2.x
               end

    begin
      ActiveRecord::Base.connection.execute <<-SQL
        SELECT pg_terminate_backend(#{field})
        FROM pg_stat_activity
        WHERE pg_stat_activity.datname = '#{database}';
      SQL
    rescue ActiveRecord::ActiveRecordError => e
      puts 'Connection lost to the database'
    end
  end
end