PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Rails + Postgres Drop-Fehler:Datenbank wird von anderen Benutzern aufgerufen

Wenn Sie die laufenden postgresql-Verbindungen für Ihre Anwendung beenden, können Sie db:drop problemlos ausführen. Wie kann man also diese Verbindungen beenden? Ich verwende die folgende Rake-Aufgabe:

# lib/tasks/kill_postgres_connections.rake
task :kill_postgres_connections => :environment do
  db_name = "#{File.basename(Rails.root)}_#{Rails.env}"
  sh = <<EOF
ps xa \
  | grep postgres: \
  | grep #{db_name} \
  | grep -v grep \
  | awk '{print $1}' \
  | xargs kill
EOF
  puts `#{sh}`
end

task "db:drop" => :kill_postgres_connections

Das Beenden der Verbindungen unter Rails wird manchmal dazu führen, dass es beim nächsten Versuch, eine Seite zu laden, abbricht, aber ein erneutes Laden stellt die Verbindung wieder her.