postgresql , update , returning , new , old
在資料庫中更新記錄時,有時為了對賬,或者防纂改的目的,需要在更新後立即傳回更新前和更新後的值。
例如以set bit為例,假設使用bit串作為火車的每個位置,每個bit代表一張票,0表示未售賣,1表示已售賣。
購票時,使用set bit=1的操作,為了確定不出現重複售票的問題,必須確定被set的value以前的值為0,set後的值為1。
這個動作其實也可以在function中來保證,不過你要擴充function的功能,在function中確定set bit前的值為0,set bit後的值為1。
本文要講的是通過update returning文法來實作類似的對照功能。
其實insert returning也有類似的用法,例如插入時并不知道資料庫生成了什麼uuid,這個uuid可能是流水号,将來程式要用來做二次确認的搜尋。(如營運商的二次确認,或者短信密碼,也需要用來作為辨別)
目前postgresql支援insert,delete,update的returning。
insert returning 傳回的是新插入的值。
delete returning 傳回的是被删除的值。
update returning 傳回的是更新後的值,不能傳回更新前的值,但是有方法可以得到。
或者等阿裡雲rds postgresql退出update returning old.column的功能吧。
例子
postgresql 支援delete, update傳回删除前的值以及更新後的值.
update returning 傳回的是更新後的值.
delete returning 傳回的是删除前的值.
returning 後的子句類似select ... from 中的子句, 是以也支援表達式 :
使用這種方法可以傳回set_bit前的bit string以及set_bit後的bit string。
或
使用這種方法也可以傳回set_bit前的bit string以及set_bit後的bit string。