簡體   English   中英

在JDBC中使用postgres鎖定表

[英]Locking Tables with postgres in JDBC

關於使用JDBC在po​​stgres數據庫中鎖定表的快速問題。 我有一個表,我想為其添加一個新記錄,但是,為了對主鍵執行此操作,我使用遞增的整數值。

我希望能夠在Java中檢索此列的最大值,並將其存儲為變量,以便在添加新行時用作新的主鍵。

這給我一個小問題,因為這將被建模為多用戶系統,當2個位置請求相同的最大值時會發生什么? 在嘗試添加相同的主鍵時,這當然會產生問題。

我意識到我應該在桌面上使用EXCLUSIVE鎖來防止在獲取密鑰和添加新行時讀取或寫入。 但是,我似乎無法找到任何方法來處理JDBC中的表鎖定,只是標准事務。

psuedo代碼如下:

primaryKey = "SELECT MAX(id) FROM table1;";
primary key++;
//id retrieved again from 2nd source

"INSERT INTO table1 (primaryKey, value 1, value 2);"

你是絕對正確的,如果兩個地點幾乎同時請求,你將遇到競爭條件。

處理此問題的方法是在postgres中創建一個序列 ,並選擇nextval作為主鍵。

我不確切知道你的方向以及你如何處理數據,但你也可以將列設置為序列 ,甚至不包括插入查詢中的列。 該列將自動自動遞增。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM