PostgreSQL – User kicken – DB-Verbindungen droppen

Veröffentlicht: Juli 28, 2016 in Misc
Schlagwörter:
ERROR:  database „Target_DB“ is being accessed by other users

Unter PostgreSQL ist es nicht möglich eine Datenbank (hier Target_DB) zu droppen solange noch aktive Verbindungen zu dieser bestehen.

Lösung

Als SuperUser lassen sich die bestehenden Verbindungen relativ leicht mittels eines SQL-Request trennen. Da es beim Wechsel von 9.1 auf 9.2 Änderungen in der Tabelle pg_stat_activity gab (procpid wurde auf pid geändert), ist es vorher ggf. erforderlich die Version zu ermitteln:

=> SELECT version();
                              version
----------------------------------------------...
 PostgreSQL 9.2.9 on x86_64-unknown-linux-gnu ...

=> SHOW server_version;
 server_version 
----------------
 9.2.9

=> SHOW server_version_num;
 server_version_num 
--------------------
 90209

 

ab PostgreSQL 9.2:
SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'TARGET_DB'
  AND pid <> pg_backend_pid();

Zeile 4 verhindert das die eigene Verbindung gedroppt wird.

bis einschließlich PostgreSQL 9.1 :
SELECT pg_terminate_backend(pg_stat_activity.procpid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'TARGET_DB'
  AND procpid <> pg_backend_pid();

Zeile 4 verhindert das die eigene Verbindung gedroppt wird.

Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s