iT邦幫忙

0

postgresql 10.13 鎖定讀取特定資料

  • 分享至 

  • xImage

大家好,這邊先簡單描述一下問題。

現在有 A B 兩個系統,這兩個系統都可以讀取/寫入同一個 table。
(不過 B 不是我們管理的,也無權請對方修改。)

然後有一些資料,會經由 B 系統去 query / update,
但這些資料其實是有時效性的,不能太早被讀取到。

而最近一直發生時間還沒到就會有人去 query / update,
我方這邊能做的處理就是先去 db update flag 讓 B 系統讀取不到。

但有些天才(?)總是可以在我們 update flag 之前,
就先 query / update 資料了,每次都會發現有一兩筆漏網之魚。
這事情其實有點困擾,
但我們也動不了 B 系統,所以才想說有沒有辦法從資料庫下手。

先鎖定某些特定資料直到某個時間點才 unlock 這樣。

以前沒這麼做過,也很少用 lock 功能,
所以想說先來問問前輩們有沒有這樣做的經驗。

在此先感謝願意回應的前輩,感恩 <(_ _)>

備註:其中有一些政治性的緣由,所以變成 B 去改資料結果要 A 負責,
不過不太好完整解釋經過,還請見諒。

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

1
rogeryao
iT邦超人 7 級 ‧ 2021-08-06 13:18:05
最佳解答

1.有 A B 兩個系統,這兩個系統都可以讀取/寫入同一個 table。
2.我方這邊能做的處理就是先去 db update flag 讓 B 系統讀取不到。
有試過在那個 table 上 CREATE TRIGGER 來 update flag 嗎 ?
CREATE TRIGGER

swallowcc iT邦新手 4 級 ‧ 2021-08-06 13:28:52 檢舉

感謝回應,這看起來似乎可行,先 try 看看再上來回報 <(_ _)>

swallowcc iT邦新手 4 級 ‧ 2021-08-06 14:37:00 檢舉

已解決,非常感謝協助(叩拜

也感謝所有回應的前輩 (繼續叩

0
海綿寶寶
iT邦大神 1 級 ‧ 2021-08-06 12:16:56

先鎖定某些特定資料直到某個時間點才 unlock 這樣。

如果可以的話
原本
負責「把特定資料寫進那個 table」的程式
改成
在某個時間點才把特定資料寫進那個 table」
應該比較簡單

看更多先前的回應...收起先前的回應...

然後過段時間,另一邊來問,總是有些天才(?) 要弄 update flag來擋我們,有什麼辦法可以突破....

人協調好,比較重要.這種事情我卡你,你鑽個洞,沒完沒了,不是長久之道.之後還是要協調啦.補充了一個方法,不是很好,就起個頭.

就像/images/emoticon/emoticon61.gif
最痛的是中間那個被捶的單位

家家有本難念的經。
如果人能搞定,也不會來問了...

有一個方法,就是把原本約定好的table 改名字,例如原本叫 tbl_for_b, 改成, tbl_hide_for_b, 然後再建立一個叫做 tbl_read_for_b 的table,結構一樣,但是沒有資料.
建立一個 view , 取原本的 tbl_for_b的名字, select * from tbl_read_for_b; 實際上就是沒有資料.....
然後當你們滿意了,要放行了.再把 view,這是偽裝成table (tbl_for_b) 定義改為 select * from tbl_hide_for_b;
然後時間窗口過了,又改回 select * from tbl_read_for_b;
這就像方唐鏡跳進來跳出去一樣.

換成我就直接用 schedule event alter table name
要嘛大家都能用
要嘛大家都不能用
一視同仁
/images/emoticon/emoticon71.gif

會不會是兩邊 server 時間不一致?
有沒有做網路校時 ?
crontab 的是到分鐘,會受到系統負荷影響,若要精度高一些,可以參考 systemd.timer

swallowcc iT邦新手 4 級 ‧ 2021-08-06 13:28:22 檢舉

感謝大大們的回應,在此回覆一下~

1, 政治問題有時候真的比技術問題難處理...

2, 寫入資料的地方也不在我們這,如果可以決定寫資料的時間/內容,
那我們其實一開始改成無法讀取的 flag 就好 XD

3, 資料蠻多的,table不太方便改名字

4, 兩台都有校時,所以實在不曉得那些 update 的人,是怎麼鑽那一點點的時間空隙...

5, 我先試試看樓下大大提供的 trigger 方法,理論上可行。

再次感謝回應,謝謝~

我要發表回答

立即登入回答