murphy
16. April 2010 um 13:23
1
Hallo zusammen,
ist es möglich, eine Funktion für jeden gefundenen Satz eines SELECTs auszuführen?
Die Query wäre sinngemäß:
postgres=# select client_addr, procpid from pg_stat_activity where datname = 'test';
Ich möchte für jeden Satz ein
pg_ctl kill ABRT ProzessID
laufen lassen, um alle Verbindungen zu dieser DB abzubrechen.
Kann mir jemand verraten, wie ich das am besten anstelle? Die bisherige Doku hat mir keinen Ansatz geliefert.
Danke,
murphy
murphy:
Hallo zusammen,
ist es möglich, eine Funktion für jeden gefundenen Satz eines SELECTs auszuführen?
Die Query wäre sinngemäß:
postgres=# select client_addr, procpid from pg_stat_activity where datname = 'test';
Ich möchte für jeden Satz ein
pg_ctl kill ABRT ProzessID
laufen lassen, um alle Verbindungen zu dieser DB abzubrechen.
Kann mir jemand verraten, wie ich das am besten anstelle? Die bisherige Doku hat mir keinen Ansatz geliefert.
Danke,
murphy
Ungetestet:
select pg_cancel_backend(procpid) from pg_stat_activity where datname = ‘test’;
Statt pg_cancel_backend kannst auch pg_terminate_backend() nehmen.
Andreas
murphy
16. April 2010 um 15:23
3
select pg_cancel_backend(procpid) from pg_stat_activity where datname = 'test';
Funktioniert auf meinem 8.3er-Server super, die pg_terminate_backend()-Variante scheint es erst ab 8.4 zu geben.
Inhaltlich habe ich jedoch noch eine Frage… Bricht das Kommando “nur” die aktuelle Query ab oder terminiert wirklich die DB-Verbindung (der Childprocess)???
Wenn ich auf meinem Testsystem eine Client-Verbindung aufbaue und die Abfrage am Server laufen lasse, würde ich erwarten, dass die Client-Connection weg ist, oder? Mein Ziel ist es, die DB (in diesem Fall test) zu droppen, daher müssen alle Verbindungen weg.
murphy:
select pg_cancel_backend(procpid) from pg_stat_activity where datname = 'test';
Funktioniert auf meinem 8.3er-Server super, die pg_terminate_backend()-Variante scheint es erst ab 8.4 zu geben.
Inhaltlich habe ich jedoch noch eine Frage… Bricht das Kommando “nur” die aktuelle Query ab oder terminiert wirklich die DB-Verbindung (der Childprocess)???
PostgreSQL: Documentation: Manuals: PostgreSQL 8.4: System Administration Functions
Table 9-55. Server Signalling Functions
Andreas
murphy
16. April 2010 um 15:28
5
Danke, ich teste dann mal los
murphy
16. April 2010 um 19:04
6
Funktioniert prima, ab 8.4 kann ich das ganze Backend killen… That’s what I want!
VIELEN DANK!
murphy