PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie lösche ich eine PostgreSQL-Datenbank, wenn aktive Verbindungen zu ihr bestehen?

Dadurch werden bestehende Verbindungen außer Ihrer getrennt:

Fragen Sie pg_stat_activity ab und erhalten Sie die PID-Werte, die Sie löschen möchten, und geben Sie dann SELECT pg_terminate_backend(pid int) ein zu ihnen.

PostgreSQL 9.2 und höher:

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 und darunter:

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();

Sobald Sie alle Verbindungen getrennt haben, müssen Sie die Verbindung trennen und den DROP DATABASE-Befehl von einer Verbindung aus einer anderen Datenbank ausführen, die nicht diejenige ist, die Sie trennen möchten.

Beachten Sie die Umbenennung von procpid Spalte zu pid . Siehe diesen Mailinglisten-Thread.