gpt4 book ai didi

java - 在 JDBC 中使用 postgres 锁定表

转载 作者:搜寻专家 更新时间:2023-11-01 02:28:25 29 4
gpt4 key购买 nike

只是一个关于使用 JDBC 在 postgres 数据库中锁定表的快速问题。我有一个表,我想为其添加一条新记录,但是,为了为主键执行此操作,我使用了一个递增的整数值。

我希望能够在 Java 中检索此列的最大值并将其存储为变量,以便在添加新行时用作新的主键。

这给了我一个小问题,因为这将被建模为一个多用户系统,当 2 个位置请求相同的最大值时会发生什么?当尝试添加相同的主键时,这当然会产生问题。

我意识到我应该在表上使用 EXCLUSIVE 锁来防止在获取键和添加新行时读取或写入。但是,我似乎找不到任何方法来处理 JDBC 中的表锁定,只能找到标准事务。

这样的伪代码:

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

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

最佳答案

您完全正确,如果两个位置大约同时请求,您将遇到竞争条件。

处理这个问题的方法是创建一个 sequence在 postgres 中并选择 nextval 作为主键。

我不知道您的确切方向以及您如何处理数据,但您也可以将该列设置为 serial甚至不在插入查询中包含该列。该列将自动自动递增。

关于java - 在 JDBC 中使用 postgres 锁定表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15709815/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com