2014

EneFebMarAbr
MayJunJulAgo
SepOctNovDic

2013

EneFebMarAbr
MayJunJulAgo
SepOctNovDic

más...

2011

EneFebMarAbr
MayJunJulAgo
SepOctNovDic

2010

EneFebMarAbr
MayJunJulAgo
SepOctNovDic

2009

EneFebMarAbr
MayJunJulAgo
SepOctNovDic

2008

EneFebMarAbr
MayJunJulAgo
SepOctNovDic

2007

EneFebMarAbr
MayJunJulAgo
SepOctNovDic

2006

EneFebMarAbr
MayJunJulAgo
SepOctNovDic

2005

EneFebMarAbr
MayJunJulAgo
SepOctNovDic

2004

EneFebMarAbr
MayJunJulAgo
SepOctNovDic

2003

EneFebMarAbr
MayJunJulAgo
SepOctNovDic

Fotolog

A través del espejo
2010-10-12: A través del espejo
¡La radio habla en binario!
2010-10-10: ¡La radio habla en binario!
Gigaminx (regalo por mi cumple)
2010-09-16: Gigaminx (regalo por mi cumple)
Trini en bici
2010-09-05: Trini en bici
Valporquero
2010-08-28: Valporquero
Mi bici nueva
2010-08-22: Mi bici nueva
Boda de Mario y Ana
2010-08-13: Boda de Mario y Ana
De cañones en Guara
2010-08-07: De cañones en Guara
Trini y Mari en Marbella
2010-08-05: Trini y Mari en Marbella
Trini y Chelo en Tabarca
2010-08-03: Trini y Chelo en Tabarca
Valid XHTML 1.1
Acceder
Etiquetas: SQL Perl cómo

(o cómo usar Tablas de Historia en PostgreSQL)

Si quieres guardar en algún lugar la historia completa de todas las inserciones, modificaciones y eliminaciones de columnas en tus tablas (para mantener una base de datos estilo wiki), no hay ninguna manera directa de hacerlo... pero aquí puedes ver cómo hacerlo, en un artículo escrito por Thomas Liske.

Funciona con PostgreSQL, creando un trigger escrito en PL/Perl llamado log_history() que añade una línea a una tabla llamada history.<SCHEMA>_<TABLENAME> con un instante de tiempo (hist_ts), la operación realizada (hist_op) y el contenido de todas las columnas, cada vez que se ejecuta un INSERT, UPDATE o DELETE. Esto realmente almacena toda la historia de las tablas en las que se use este trigger.

Aquí puedes ver el trigger log_history, y una función sencilla que activa el trigger en todas las tablas de un schema, history_create_triggers. Puedes llamar a esta función para el schema "public" usando SELECT history_create_triggers('public');

Estas dos funciones están escritas en PL/Perl y PL/pgSQL, respectivamente, así que tendrás que añadir esos dos lenguajes a tu base de datos PostgreSQL, si no lo has hecho ya, con CREATE LANGUAGE plperl; y CREATE LANGUAGE plpgsql;


Nuevo comentario

Por favor, escribe tu nombre y lo que quieras decir :-)

Nombre:
Comentario:



dewa, 1 de agosto de 2019

Hi Juan,

I got error when implement this for not public schema.

Here is the message :

NOTICE: Creating history table for 'anggota.company'.
ERROR: null value in column "id" violates not-null constraint at line 64.
CONTEXT: PL/Perl function "log_history"
********** Error **********

ERROR: null value in column "id" violates not-null constraint at line 64.
SQL state: 38000
Context: PL/Perl function "log_history"