场景:-有一个表X。当出现新请求时,使用“选择”检查是否存在记录,如果没有发现,则使用“插入”将数据插入到表中。一旦“插入”发生,触发器将在表X上触发
问题:-插入时间为10秒。 触发Select(在5秒钟内)之前,直到该时间之前,插入尚未完成。因此,将插入多个记录。而且,触发器也会再次被触发。
该问题如何解决?有什么建议可以克服这种情况吗?
答案 0 :(得分:0)
我认为您需要查看Postgres手册中的13.2. Transaction Isolation。默认情况下,read commit允许您彼此独立地进行读取和写入,因此您需要更改行为以阻止读取或提交,但这取决于您希望在应用程序中使用它的方式,因此请先阅读然后决定
答案 1 :(得分:0)
在插入新行之前使用SELECT语句来防止重复行永远不会正常工作(至少不能达到可接受的性能)。
在表上创建唯一键或约束,以防止插入重复的值并处理发生的任何错误。
如果这样做,也可以使用insert ... on conflict do update ...
,它可以安全地用于并发插入。