Как реализовать аудит / управление версиями таблиц изменений в PostgreSQL - PullRequest
6 голосов
/ 06 июля 2010

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

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

ИЛИ лучше, если для каждой таблицы, для которой требуется управление версиями, будет задана копия таблицы VERSION?

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

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

PPS: Если в таблицах используются ПРОГРАММНЫЕ УДАЛЕНИЯ (фантомное удаление) вместо УДАЛЕННЫХ, удаляется ли какой-либо из ваших советов?

Ответы [ 2 ]

4 голосов
/ 06 июля 2010

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

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

2 голосов
/ 30 июня 2013

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

...