Kill a postgresql session/connection

前端 未结 20 1958
暖寄归人
暖寄归人 2020-11-28 00:11

How can I kill all my postgresql connections?

I\'m trying a rake db:drop but I get:

ERROR:  database \"database_name\" is being accessed         


        
20条回答
  •  不知归路
    2020-11-28 00:39

    This seems to be working for PostgreSQL 9.1:

    #{Rails.root}/lib/tasks/databases.rake
    # monkey patch ActiveRecord to avoid There are n other session(s) using the database.
    def drop_database(config)
      case config['adapter']
      when /mysql/
        ActiveRecord::Base.establish_connection(config)
        ActiveRecord::Base.connection.drop_database config['database']
      when /sqlite/
        require 'pathname'
        path = Pathname.new(config['database'])
        file = path.absolute? ? path.to_s : File.join(Rails.root, path)
    
        FileUtils.rm(file)
      when /postgresql/
        ActiveRecord::Base.establish_connection(config.merge('database' => 'postgres', 'schema_search_path' => 'public'))
        ActiveRecord::Base.connection.select_all("select * from pg_stat_activity order by procpid;").each do |x|
          if config['database'] == x['datname'] && x['current_query'] =~ //
            ActiveRecord::Base.connection.execute("select pg_terminate_backend(#{x['procpid']})")
          end
        end
        ActiveRecord::Base.connection.drop_database config['database']
      end
    end
    

    Lifted from gists found here and here.

    Here's a modified version that works for both PostgreSQL 9.1 and 9.2.

提交回复
热议问题