1
0
mirror of https://github.com/jbranchaud/til synced 2026-01-04 23:58:01 +00:00

Add Terminating A Connection as a postgres til

This commit is contained in:
jbranchaud
2016-02-21 14:20:08 -06:00
parent bc43c45170
commit 32c4937cfa
2 changed files with 44 additions and 1 deletions

View File

@@ -0,0 +1,42 @@
# Terminating A Connection
Consider the scenario where you are trying to drop a database, but there are
existing connections.
```bash
$ dropdb sample_db
dropdb: database removal failed: ERROR: database "sample_db" is being accessed by other users
DETAIL: There is 1 other session using the database.
```
If you don't know where these connections are, you can terminate them within
a `psql` session. You just have to figure out the `pid` of those
connections. In [List Connections To A
Database](postgres/list-connections-to-a-database.md), I explained how to
get at the `pid` values of connections. Using the `pid` value, you can
terminate a connection.
```sql
> select pg_terminate_backend(12345);
pg_terminate_backend
----------------------
t
```
To terminate all connections to a particular database, use a query like the
following:
```sql
select pg_terminate_backend(pg_stat_activity.pid)
from pg_stat_activity
where pg_stat_activity.datname = 'test_drop'
and pid <> pg_backend_pid();
pg_terminate_backend
----------------------
t
```
This excludes the current session, so you'll need to exit `psql` as well
before dropping the database.
[source](http://stackoverflow.com/questions/5408156/how-to-drop-a-postgresql-database-if-there-are-active-connections-to-it)