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

1voto

Fahwi Punkte 11

Fall :
Die Abfrage kann nicht ausgeführt werden:

DROP TABLE dbo.t_tabelname

Lösung:
a. Zeigen Sie die Abfrage Status Aktivität wie folgt an:

SELECT * FROM pg_stat_activity  ;

b. Suchen Sie die Zeile, in der die Spalte "Abfrage" den Wert :

'DROP TABLE dbo.t_tabelname'

c. In derselben Zeile den Wert der Spalte "PID" ablesen

example : 16409

d. Führen Sie diese Skripte aus:

SELECT 
    pg_terminate_backend(25263) 
FROM 
    pg_stat_activity 
WHERE 
    -- don't kill my own connection!
    25263 <> pg_backend_pid()
    -- don't kill the connections to other databases
    AND datname = 'database_name'
    ;

1voto

Shifa Khan Punkte 759

Entferntes Szenario. Aber wenn Sie versuchen, Tests in einer Rails-App auszuführen, und Sie erhalten etwas wie

"ActiveRecord::StatementInvalid: PG::ObjectInUse: ERROR: Auf die Datenbank "myapp_test" wird von anderen Benutzern zugegriffen DETAIL: Es gibt 1 andere Sitzung, die die Datenbank verwendet."

Stellen Sie sicher, dass Sie pgAdmin oder andere Postgres-GUI-Tools schließen, bevor Sie Tests durchführen.

1voto

mlabarca Punkte 812

Ich wollte nur darauf hinweisen, dass die Antwort von Haris möglicherweise nicht funktioniert, wenn ein anderer Hintergrundprozess die Datenbank verwendet, in meinem Fall waren es verzögerte Aufträge:

script/delayed_job stop

Und erst dann konnte ich die Datenbank löschen/zurücksetzen.

1voto

jtsagata Punkte 2155

Es gibt keinen Grund, sie fallen zu lassen. Löschen Sie einfach das öffentliche Schema und erstellen Sie es neu. In den meisten Fällen hat dies genau den gleichen Effekt.

namespace :db do

desc 'Clear the database'
task :clear_db => :environment do |t,args|
  ActiveRecord::Base.establish_connection
  ActiveRecord::Base.connection.tables.each do |table|
    next if table == 'schema_migrations'
    ActiveRecord::Base.connection.execute("TRUNCATE #{table}")
  end
end

desc 'Delete all tables (but not the database)'
task :drop_schema => :environment do |t,args|
  ActiveRecord::Base.establish_connection
  ActiveRecord::Base.connection.execute("DROP SCHEMA public CASCADE")
  ActiveRecord::Base.connection.execute("CREATE SCHEMA public")
  ActiveRecord::Base.connection.execute("GRANT ALL ON SCHEMA public TO postgres")
  ActiveRecord::Base.connection.execute("GRANT ALL ON SCHEMA public TO public")
  ActiveRecord::Base.connection.execute("COMMENT ON SCHEMA public IS 'standard public schema'")
end

desc 'Recreate the database and seed'
task :redo_db => :environment do |t,args|
  # Executes the dependencies, but only once
  Rake::Task["db:drop_schema"].invoke
  Rake::Task["db:migrate"].invoke
  Rake::Task["db:migrate:status"].invoke 
  Rake::Task["db:structure:dump"].invoke
  Rake::Task["db:seed"].invoke
end

end

1voto

Ich arbeite mit einem Mac und verwende Postgres über Postgres.app . Ich habe dieses Problem gelöst, indem ich die App beendet und neu gestartet habe.

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