¿Es una estrategia efectiva para dejar una pista de auditoría / historial de cambios para las aplicaciones DB?

¿Cuáles son algunas estrategias con las que las personas han tenido éxito para mantener un historial de cambios para los datos en una base de datos bastante compleja? Una de las aplicaciones que uso y desarrollo con frecuencia podría realmente beneficiarse de una forma más completa de rastrear cómo los registros han cambiado con el tiempo. Por ejemplo, en este momento los registros pueden tener una cantidad de marca de tiempo y campos de usuario modificados, pero actualmente no tenemos un esquema para registrar cambios múltiples, por ejemplo, si una operación se revierte. En un mundo perfecto, sería posible reconstruir el registro como estaba después de cada guardado, etc.

Alguna información sobre el DB:

Necesita tener la capacidad de crecer en miles de registros por semana50-60 mesasLas tablas revisadas principales pueden tener varios millones de registros cada unaCantidad razonable de claves externas e índices establecidosUsando PostgreSQL 8.x