Archivo del mes Septiembre 2008

Encontrados 2 resultados , mostrando del 1 al 2

PHP Senior

Martes 23 Septiembre 2008

Cercant informació sobre PHP5 i orientació a objectes he trobat un lloc web força interessant:PHP Senior. Hi ha molts d’articles interessants. L’única cosa és que l’autor sembla que està obsessionat en que PHP sigui una espècie de “Light Java”, a molts dels artícles fa referència al Java como a bona referència.

Postgres: creando tablas de históricos automáticamente

Miércoles 10 Septiembre 2008

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