PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Erro ao soltar Rails + Postgres:banco de dados está sendo acessado por outros usuários


Se você matar as conexões postgresql em execução para seu aplicativo, poderá executar db:drop muito bem. Então, como matar essas conexões? Eu uso a seguinte tarefa de rake:
# 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

Matar as conexões sob os trilhos às vezes fará com que ele vomite na próxima vez que você tentar carregar uma página, mas recarregá-la novamente restabelece a conexão.