Funktion für jeden gefundenen Satz ausführen

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



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.

PostgreSQL: Documentation: Manuals: PostgreSQL 8.4: System Administration Functions
Table 9-55. Server Signalling Functions

Andreas

Danke, ich teste dann mal los :slight_smile:

Funktioniert prima, ab 8.4 kann ich das ganze Backend killen… That’s what I want!

VIELEN DANK!

murphy