很多業務也行有這樣的需求,新的資料會不斷的插入,并且可能會有更新。
對于更新的資料,需要記錄更新前的記錄到曆史表。

這個需求有點類似于審計需求,即需要對記錄變更前後做審計。
我以前有寫過使用hstore和觸發器來滿足審計需求的文檔,有興趣的同學可以參考
<a href="http://blog.163.com/digoal@126/blog/static/163877040201252575529358/">http://blog.163.com/digoal@126/blog/static/163877040201252575529358/</a>
本文的目的并不是審計,而且也可能不期望使用觸發器。
還有什麼方法呢?
postgresql 這麼高大上,當然有,而且還能在一句sql裡面完成,看法寶。
建立一張目前狀态表,一張曆史記錄表。
插入一條不存在的記錄,不會觸發插入曆史表的行為。
注意替代變量
插入一條已存在的記錄,并且有資料的變更,觸發資料插入曆史表的行為。
插入一條已存在的記錄,并且已存在的記錄值和老值一樣,不會觸發将資料插入曆史表的行為。
執行計劃
在不支援insert on conflict文法的postgresql中(小于9.5的版本),sql可以調整為:
小于9.5的版本,實作本文的場景,需要這樣寫。