Como implementar auditoria / controle de versão de modificações de tabela no PostgreSQL

Estamos implementando um novo sistema usando Java / Spring / Hibernate no PostgreSQL. Esse sistema precisa fazer uma cópia de Todos os registros assim que uma modificação / exclusão for feita no (s) registro (s) nas Tabelas. Posteriormente, as tabelas de auditoria serão consultadas pelos relatórios para exibir os dados para os usuários.

Eu estava planejando implementar esse recurso de auditoria / controle de versão tendo um gatilho na (s) tabela (s) que faria uma cópia da linha modificada (linha excluída) "PARA" uma TABELA chamada ENTITY_VERSIONS, que teria cerca de 20 colunas chamadas col1, col2 , col3, col4, etc, que armazenariam as colunas da (s) tabela (s) acima;No entanto, o problema é que se houver mais de 1 tabela a ser versionada e APENAS 1 tabela TARGET (ENTITY_VERSIONS) para armazenar todas as versões das tabelas, como faço para projetar a tabela TARGET?

OU é melhor que exista uma CÓPIA da tabela VERSION para cada tabela que precise de versionamento?

Será um bônus se alguns ponteiros para o código de gatilhos do PostgreSQL (e procedimento armazenado associado) para implementar a auditoria / controle de versão puderem ser compartilhados.

P.S: eu olheiSugestões para implementar tabelas de auditoria no SQL Server? e meio que gosto da resposta, exceto que eu NÃO saberia que tipo OldValue e NewValue devem ser?

P.P.S: Se as tabelas usarem SOFT DELETEs (exclusões fantasmas) em vez de exclusões HARD, algum dos seus conselhos muda?

questionAnswers(2)

yourAnswerToTheQuestion