Transacciones en Postgres y las funciones para obtener Timestamps

Hola, encontré este post1 sobre algunos problemas que pueden surgir en un contexto de transacciones en Postgres usando marcas de tiempo.

Básicamente explica que al encontrar que muchos frameworks usan un esquema de triggers para mantener una base de datos de auditoria (Como Toba viene haciendo de hace rato), usando la función now() o current_timestamp (Que son semanticamente equivalentes en postgres2), el timestamp devuelto es de cuando se ejecuto la sentence “START TRANSACTION”.

Este comportamiento puede generar inconsistencia en las tablas de auditoria, haciendo que un evento B ocurrido después de otro A, tenga un timestamp anterior. Mirando un poco triggers de las tablas de auditoria, me pareció encontrar que en toba se utiliza current_timestamp. Si esto no es así, disculpen.

La sugerencia en los comments del post1 es que se utilice la función clock_timestamp() en lugar de now() o current_timestamp.

Me pareció interesante dejarlo como sugerencia para ser testeado y probado, y en caso de existir el problema, pueda ser modificado para futuras versiones de Toba.

Hola Tomas,

gracias por traer a colacion esto, voy a modificar la funcion que genera los triggers asi se usa la nueva manera que es mas precisa.
Igual va a requerir que se regenere el esquema de auditoria para que tenga efecto.

Saludos :wink: