用xmin當作表的時間戳(postgresql)

2021-08-25 15:21:19 字數 954 閱讀 6679

postgresql的每個表都有個內建的、隱藏的字段xmin,儲存的是修改時或插入時的xid(transaction id),只要該行一被修改,該xmin就有變化,不信大家可以嘗試一下。

[b](xmin會+1)[/b]

所以實際應用中可以將xmin當作表的時間戳來處理。在c/s結構的應用設計中,我們常常有這樣的流程:

2,讓客戶端對這個緩衝進行互動式的修改

3,提交更新時,要先檢測這個記錄是否被其他使用者修改(此時鎖定),假如這個記錄被其他使用者所修改,則不提交修改,否則提交緩衝。

這個流程類似於ado的batch update。在vfp中,這叫樂觀鎖定遠端檢視.

在比較緩衝是否被其他使用者修改時,有2種比較方法,1種是只比較本地所修改的字段,另外1種是比較所有的字段。

假如是第2種,就可以用時間戳來比較,以下是例子

2. 讓客戶端對這個緩衝進行互動式的修改

3. 提交更新時,

begin transaction;

select * , xmin as new_xmin from *** where .... for update

if new_xmin <> old_xmin then

-- 已被他人修改,丟擲錯誤或其他流程

rollback

else

update *** set ***=*** where ...

commit

end假如你的介面不接受xid資料型別, 可以將xid轉換為integer,語句為cast(xmin as integer), 兩者在postgresql內部都是同一型別, 不過xid 到 integer的型別轉化不是postgresql內嵌的,所以還需要自定義這種轉換

create cast (xid as integer) without function.

如果沒有以上語句, cast(xmin as integer)可能不成功.

[url]

python中時間模組用的時間戳在爬蟲中的使用

import time 1.預設 10位整數 6位微秒 時間戳 time.time 1593919251.152604 2.毫秒級時間戳的 13位整數 int time.time 1000 1593919281753 3.將字串轉化為時間戳 2020 7 5 11 23 05 1593919385 ...

mysql表根據時間戳字段建立表分割槽的儲存過程

這篇文章與mysql儲存過程按月建立表分割槽 方式一 寫的是相同的內容,只是在表分割槽建立方式上不一樣。標題已經寫的很清楚了,直接貼sql語句啦。普通新增第乙個表分割槽語句 alter table iot divice info partition by range unix timestamp c...

使用時間戳 merge 進行兩個表之間的同步

print 當前表 iwt page declare max id int 獲得最大的 select max id isnull max time stamp 0 from event topic print max id with cet tbas select topicid topictitl...