Question: I have a rails application running over Postgres.

I have two servers: one for testing and the other for production.

Very often I need to clone the production DB on the test server.

The command I'm runnig via Vlad is:

```
rake RAILS_ENV='test_server' db:drop db:create

```

The problem I'm having is that I receive the following error:

```
ActiveRecord::StatementInvalid: PGError: ERROR: database <database_name> is being accessed by other users DROP DATABASE IF EXISTS <database_name>

```

This happens if someone has accessed the application via web recently (postgres keeps a "session" opened)

Is there any way that I can terminate the sessions on the postgres DB?

Thank you.

### Edit

I can delete the database using phppgadmin's interface but not with the rake task.

How can I replicate phppgadmin's drop with a rake task?

Answer: 
Easier and more updated way is:
1. Use `ps -ef | grep postgres` to find the connection #
2. `sudo kill -9 "# of the connection`

Note: There may be identical PID. Killing one kills all.
When we used the "kill processes" method from above, the db:drop was failing (if :kill\_postgres\_connections was prerequisite). I believe it was because the connection which that rake command was using was being killed. Instead, we are using a sql command to drop the connection. This works as a prerequisite for db:drop, avoids the risk of killing processes via a rather complex command, and it should work on any OS (gentoo required different syntax for `kill`).

```
cmd = %(psql -c "SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE procpid <> pg_backend_pid();" -d '#{db_name}')

```

Here is a rake task that reads the database name from database.yml and runs an improved (IMHO) command. It also adds db:kill\_postgres\_connections as a prerequisite to db:drop. It includes a warning that yells after you upgrade rails, indicating that this patch may no longer be needed.

see: <https://gist.github.com/4455341>, references included