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