Как реализовать аудит / управление версиями модификаций таблиц в PostgreSQL

Мы внедряем новую систему с использованием Java / Spring / Hibernate на PostgreSQL. Эта система должна сделать копию каждой записи, как только будет выполнено изменение / удаление записи (записей) в таблицах. Позже отчеты аудита будут запрашивать таблицы аудита для отображения данных пользователям.

Я планировал реализовать эту функцию аудита / управления версиями, имея триггер в таблице (таблицах), который будет делать копию измененной строки (удаленной строки) «TO» ТАБЛИЦЫ с именем ENTITY_VERSIONS, которая будет иметь около 20 столбцов с именами col1, col2 , col3, col4 и т. д., в которых будут храниться столбцы из приведенных выше таблиц; Однако проблема в том, что если для управления версиями требуется более 1 таблицы и ТОЛЬКО 1 таблица TARGET (ENTITY_VERSIONS) для хранения всех версий таблиц, как мне разработать таблицу TARGET?

ИЛИ лучше, чтобы была КОПИЯ таблицы ВЕРСИИ для каждой таблицы, для которой требуется управление версиями?

Будет бонусом, если некоторые указатели на код триггеров PostgreSQL (и связанных с ними хранимых процедур) для реализации аудита / управления версиями могут быть общими.

PS: Я просмотрел Предложения по внедрению таблиц аудита в SQL Server? и вроде как ответ, за исключением того, что я НЕ знал бы, какого типа должны быть OldValue и NewValue?

P.P.S: Если в таблицах используются МЯГКИЕ УДАЛЕНИЯ (фантомные удаления) вместо ЖЕСТКИХ удалений, изменится ли какой-либо из ваших советов?


person anjanb    schedule 06.07.2010    source источник


Ответы (2)


Я хотел бы иметь копию каждой таблицы для хранения версий той таблицы, которую вы хотите сохранить. Это похоже на кошмар - поддерживать и использовать глобальную таблицу управления версиями.

Эта ссылка в документации Postgres показывает некоторые примеры триггеров аудита в Postgres.

person rfusca    schedule 06.07.2010
comment
+1 спасибо. Интересно, каковы сильные стороны наличия ГЛОБАЛЬНОЙ ТАБЛИЦЫ аудита по сравнению с таблицей аудита для каждой таблицы по сравнению с запросом данных для отчетности? - person anjanb; 07.07.2010
comment
Если вам каким-то образом удастся создать ГЛОБАЛЬНУЮ таблицу аудита, я предвижу БОЛЬШЕ приведения типов. Я имею в виду ... в каком типе вы бы сохранили все столбцы? - person rfusca; 07.07.2010

В глобальной таблице все столбцы могут храниться в одном столбце как тип hstore. Я только что попробовал аудит, и он отлично работает, рекомендую. Прекрасный пример таблицы аудита отслеживает все изменения в одной таблице, просто добавляя триггер в таблицы, в которых вы хотите начать вести журнал аудита. все изменения сохраняются в виде типа hstore - работает для v 9.1+ по этой ссылке

person roger    schedule 30.06.2013