554 Stimmen

Eine Postgresql-Sitzung/Verbindung beenden

Wie kann ich alle meine Postgresql-Verbindungen beenden?

Ich versuche eine rake db:drop aber ich verstehe:

ERROR:  database "database_name" is being accessed by other users
DETAIL:  There are 1 other session(s) using the database.

Ich habe versucht, die Prozesse zu beenden, die ich in einer ps -ef | grep postgres aber auch das funktioniert nicht:

kill: kill 2358 failed: operation not permitted

6voto

Chris Aitchison Punkte 4606

Ich verwende den folgenden Rake-Task, um die Rails-Funktion außer Kraft zu setzen drop_database méthode.

lib/database.rake

require 'active_record/connection_adapters/postgresql_adapter'
module ActiveRecord
  module ConnectionAdapters
    class PostgreSQLAdapter < AbstractAdapter
      def drop_database(name)
        raise "Nah, I won't drop the production database" if Rails.env.production?
        execute <<-SQL
          UPDATE pg_catalog.pg_database
          SET datallowconn=false WHERE datname='#{name}'
        SQL

        execute <<-SQL
          SELECT pg_terminate_backend(pg_stat_activity.pid)
          FROM pg_stat_activity
          WHERE pg_stat_activity.datname = '#{name}';
        SQL
        execute "DROP DATABASE IF EXISTS #{quote_table_name(name)}"
      end
    end
  end
end

Bearbeiten: Dies ist für Postgresql 9.2+

5voto

X-Coder Punkte 2360

ICH HABE DAS PROBLEM AUF DIESE WEISE GELÖST:

In meinem Windows8 64 Bit, nur restart des Dienstes: postgresql-x64-9.5

4voto

Jamon Holmgren Punkte 22240

Ich hatte dieses Problem und das Problem war, dass Navicat mit meiner lokalen Postgres-Datenbank verbunden war. Nachdem ich die Verbindung zu Navicat getrennt hatte, verschwand das Problem.

EDITAR:

Auch, als absolut letztes Mittel können Sie eine Sicherungskopie Ihrer Daten erstellen und dann diesen Befehl ausführen:

sudo kill -15 `ps -u postgres -o pid`

... was alles, worauf der Postgres-Benutzer zugreift, vernichten wird. Vermeiden Sie es, dies auf einem Produktionsrechner zu tun, aber in einer Entwicklungsumgebung sollte es kein Problem sein. Es ist wichtig, dass Sie sicherstellen jede postgres Prozess wirklich beendet ist, bevor Sie versuchen, PostgreSQL danach neu zu starten.

EDIT 2:

Aufgrund von dieser unix.SE-Beitrag Ich habe mich von kill -9 à kill -15 .

3voto

Alex Binzar Punkte 31

In der PG-Administration können Sie die Verbindung zu Ihrem Server trennen (Rechtsklick auf den Server) und alle Sitzungen werden beim Neustart getrennt.

2voto

Stan Amsellem Punkte 393

Beenden Sie postgres und starten Sie es neu. Einfach, aber funktioniert bei mir jedes Mal, während andere Cli-Befehle manchmal nicht funktionieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X