Jak wyżej, coś w bazie mieli a my nie chcemy czekać aż się skończy i pojawi w logu wtylko chcemy podejrzeć teraz. To tak:

  1. W postgresql.conf ustawiamy stats_command_string = true
  2. Restart bazy (pg_ctl reload mi nie pomógł, ale akurat testowałem na starej wersji 7.4)
  3. I tyle ;]. Teraz pare SQLi żeby wyciągnąć interesujące nas dane:

Podstawowa:

select * from pg_stat_activity;

Pokazuje wszystko co się aktualnie dzieje w bazie. Ale jeżeli chcemy wyciągnąć tylko długo działające to np.

select *, (now() - query_start) as time from pg_stat_activity where now()-query_start > time '00:00:10'

pokaże te działające dłużej niż 10 sekund. można nawet się pokusić o jakiś prosty skrypt logujący co się dzieje.

PGPASSWORD=some_pass /usr/bin/psql -h 1.2.3.4 -p5404 -U backup postgres -c "select now(), *, (now() - query_start) as time from pg_stat_activity where now()-query_start > time '00:00:10';" -A -t

a potem to wysłać albo do pliku albo przez mail do admina