KIT DIGITAL ¡No te quedes sin tu ayuda de hasta 12.000€ de los fondos europeos para pymes y autónomos! QUIERO MÁS INFORMACIÓN

Postgres: creando tablas de históricos automáticamente

Blog

blog

Una “tabla de históricos” (o comunmente llamada “de auditoría”) almacena todas las operaciones de base de datos (adición, modificación y borrado) que se realizan sobre otra tabla. De este modo, en caso de error o pánico, se puede volver a una versión anterior y también encontrar al causante del problema.

Como he leído por ahí, existen tantas formas de manejar tablas de auditorías como desarrolladores. A mi personalmente la que me gusta es la descrita aquí. Utiliza una característica de postgres (RECORDS) para almacenar en sendos campos todo el contenido de los registros afectados antes y después de cada operación. Esto ofrece varias ventajas:

Modificaciones futuras a las estructura de la tabla no requieren modificaciones a la tabla de auditoria. Sigue siendo accesible el contenido de cada campo individual en los registros, gracias a que postgres que permite acceder a los subcampos con la sintaxis (tabla.campo_registro).campo.

Así pues, para cada tabla que queremos auditar necesitamos:

  • Crear la tabla de auditoria
  • Crear la función que actualice los datos en la tabla de auditoria
  • Crear un trigger que dispare la función anterior cuando se produzcan cambios en la tabla original
  • Sería fantástico tener un código que generase esto automáticamente para una tabla y, tras pegarme trompazos contra los mismos problemas que han tenido otros (aquí y aquí), he dado con un método sencillo que funciona. Se trata de generar tanto la tabla de auditoría, como la función y el trigger de forma dinámica.

Adjunto el código por si le puede servir a alguien: código plpgsql para audit-log

Volver

¡No esperes a mañana, contáctanos hoy y concertaremos una primera reunión gratis y sin compromiso!