在JDBC中使用PostgreSQL锁定表格

4
关于使用JDBC在PostgreSQL数据库中锁定表格的问题,我有一个快速的问题。 我有一个表格,我想在其中添加一条新的记录,为此,我使用递增的整数值作为主键。
我想能够在Java中检索此列的最大值,并将其存储为变量以用作添加新行时的新主键。
这给我带来了一个小问题,因为这将被建模为多用户系统,当两个位置请求相同的最大值时会发生什么? 这当然会在尝试添加相同的主键时创建问题。
我意识到我应该在获取密钥并添加新行时在表上使用EXCLUSIVE锁定来防止读取或写入。 然而,我似乎找不到任何处理JDBC中表锁定的方法,只有标准事务。
伪代码如下:
primaryKey = "SELECT MAX(id) FROM table1;";
primary key++;
//id retrieved again from 2nd source

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

5
您说得对,如果两个位置同时请求,就会出现竞态条件。处理这种情况的方式是在PostgreSQL中创建一个序列(sequence),然后将nextval作为主键选择。不知道您的数据处理方向和具体情况,您也可以将该列设置为serial类型,甚至无需在插入查询中包含该列,该列将自动递增。请参考以下链接:创建序列serial 类型

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接