Postgresql锁定多个用户的共享表

时间:2013-10-29 11:23:04

标签: java ruby postgresql rdbms postgresql-9.2

所以,我在这里遇到了同步问题;让我们解释一下情况:

我有一个名为Sendings的表格,其中包含以下列:

id   sending_object_id    type   destinatary

id是postgresql为每个表提供的自动序列ID。发送object_id是一个自定义标识符,type和destinatary ...对于这个特定问题并不重要。

这是表格如何与数据一起显示的示例:

  id   sending_object_id    type   destinatary
  1          1               1         A7
  2          1               1         B1
  3          2               2         A1
  4          2               2         A2
  5          3               1         B8
  6          4               1         N1

正如您所见,可以将相同的“object_id”发送给多个目的地。现在,当两个不同的用户(有两台不同的计算机)尝试插入新的发送时出现同步问题。

用户A 引入新的发送信息,数据库引擎生成SelectMax(sending_object_id)以便为注册表创建新的sending_object_id。

用户B 同时引入了新的发送,另一个SelectMax(sending_object_id).

在插入新数据的同时,如何避免重复sending_object_id

提前致谢。

2 个答案:

答案 0 :(得分:1)

您需要在创建新的sending_object_id时锁定表格,或者,如果您不关心该数字是什么,请创建自己的sequence并在其上调用nextval

答案 1 :(得分:1)

我认为需要使用sequences。在任何情况下,它们都保证是独一无二的。