PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Erreur de dépôt Rails + Postgres :la base de données est en cours d'accès par d'autres utilisateurs

Si vous tuez les connexions postgresql en cours d'exécution pour votre application, vous pouvez alors exécuter db:drop très bien. Alors, comment tuer ces connexions ? J'utilise la tâche de rake suivante :

# 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

Tuer les connexions sous les rails le fera parfois vomir la prochaine fois que vous essaierez de charger une page, mais la recharger à nouveau rétablira la connexion.