我們在PostgreSQL上實現了一個使用Java/Spring/Hibernate的新系統。一旦對錶格中的記錄進行了修改/刪除,該系統需要製作每個記錄的副本。稍後,報告將查詢審計表以向用戶顯示數據。如何在PostgreSQL上實現對錶修改的審計/版本化
我打算通過在表上創建一個觸發器來實現這種審計/版本控制功能,該功能會將修改後的行(刪除行)的副本「TO」複製到名爲ENTITY_VERSIONS的TABLE中,該表具有大約20列稱爲col1,col2,col3,col4等,它們將存儲上表中的列; 但是,問題是如果有超過1個表被版本化並且只有1個TARGET表(ENTITY_VERSIONS)存儲所有表的版本,那麼我如何設計TARGET表?
或者更好的是,每個需要版本控制的表都會有一個版本表的COPY?
如果可以共享用於實現審計/版本控制的PostgreSQL觸發器(和相關存儲過程)代碼的某些指針,那將是獎金。
P.S:我看着Suggestions for implementing audit tables in SQL Server?有點像答案,除了我不知道OldValue和NewValue是什麼類型?
P.P.S:如果表格使用SOFT DELETE(幻影刪除)而不是HARD刪除,那麼您的建議是否改變?
+1 謝謝。 我想知道擁有「GLOBAL審計表」與「每個表的審計表」的優點是什麼w.r.t查詢報告數據? – anjanb 2010-07-07 12:30:30
如果你以某種方式設法擁有GLOBAL審計表,我預見ALOT的類型轉換。我的意思是......你會將所有列存儲在什麼類型中? – rfusca 2010-07-07 16:44:58
rfusca:對。是的,那也是我的懷疑! – anjanb 2010-07-08 06:32:33