PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come eliminare un database PostgreSQL se ci sono connessioni attive ad esso?

Verranno eliminate le connessioni esistenti ad eccezione delle tue:

Interroga pg_stat_activity e ottieni i valori pid che vuoi eliminare, quindi emetti SELECT pg_terminate_backend(pid int) a loro.

PostgreSQL 9.2 e versioni successive:

SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'TARGET_DB' -- ← change this to your DB
  AND pid <> pg_backend_pid();

PostgreSQL 9.1 e precedenti:

SELECT pg_terminate_backend(pg_stat_activity.procpid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'TARGET_DB' -- ← change this to your DB
  AND procpid <> pg_backend_pid();

Una volta disconnessi tutti, dovrai disconnetterti ed emettere il comando DROP DATABASE da una connessione da un altro database, ovvero non quello che stai tentando di eliminare.

Nota la ridenominazione di procpid colonna a pid . Vedi questo thread della mailing list.