如何在Postgres中处理并发请求?

时间:2018-09-26 13:20:33

标签: postgresql select concurrency insert

场景:-有一个表X。当出现新请求时,使用“选择”检查是否存在记录,如果没有发现,则使用“插入”将数据插入到表中。一旦“插入”发生,触发器将在表X上触发

问题:-插入时间为10秒。 触发Select(在5秒钟内)之前,直到该时间之前,插入尚未完成。因此,将插入多个记录。而且,触发器也会再次被触发。

该问题如何解决?有什么建议可以克服这种情况吗?

2 个答案:

答案 0 :(得分:0)

我认为您需要查看Postgres手册中的13.2. Transaction Isolation。默认情况下,read commit允许您彼此独立地进行读取和写入,因此您需要更改行为以阻止读取或提交,但这取决于您希望在应用程序中使用它的方式,因此请先阅读然后决定

答案 1 :(得分:0)

在插入新行之前使用SELECT语句来防止重复行永远不会正常工作(至少不能达到可接受的性能)。

在表上创建唯一键或约束,以防止插入重复的值并处理发生的任何错误。

如果这样做,也可以使用insert ... on conflict do update ...,它可以安全地用于并发插入。