Auditoria automatica en Postgres 9.1

Tema: 

Al crear una auditoria automatica y transparente para el usuario, me decidí hacerlo todo en postgres, ya que anteriormente se lo hacia desde la programación del sistema pero al hacer esto se perdía las acciones realizadas desde la propia base, ahora el primer requerimiento era que se debe agregar todas las acciones a una tabla que contendría los campos basicos : usuario que genera el cambio, fecha, ip, tabla que se cambio, pk de la tabla, tipo de acción (insert, update, delete, hasta select de algunas tablas).

Entonces el experto en base de datos de la institución que me solicitaba esto habia realizado la esquematizacion de la siguiente forma: que por cada tabla que existia se debia crear una tabla de auditoria, la misma que tendra los mismos campos en cada tabla, cuando vi esto decidi unificar todas las tablas en una sola, la cual la particionaría gracias a que postgres desde la version > a 8.4 permite realizar esto, entonces cree las particiones por tabla y me cree un trigger por tabla que me permita registrar las acciones que se realizaban sobre las tablas y se registren automáticamente en la tabla particionada, obviamente en un esquema diferente, una vez realizado esto, ya estaba casi listo mi super esquema de auditoria, el verdadero problema es que no encontraba forma alguna de como capturar la sentencia sql original que se ejecutó, intente reconstruirla, el insert me quedo facil unicamente haciendole con NEW.* ya logre tener todo el insert pero para update se me complico la vida, pase tiempo buscando investigando y no encontraba la solucion hasta que mi buen amigo jcasanov me sugirió que use pg_stat_statements que es una extension de contrib, con lo cual puede obtener cada consulta, alter, create,drop,delete,etc en resumen cada actividad que realizaba sobre la tablas inclusive sobre el propio pg_catalog, lo comparto con ustedes ya que posiblemente a alguien alguna vez que quiso capturar el sql original que llega al postgres y no lo logro le pueda ser de utilidad, una de las posibles desventajas es que se debe incremetar la memoria compartida pero en realidad no es tanta desventaja si se tiene tuneado el postgres.

Ojala a alguien le sirva les dejo el post de la documentacion sobre el pg_stat_statements

http://www.postgresql.org/docs/devel/static/pgstatstatements.html