首页 > 解决方案 > 如何在 postgres 中处理并发请求?

问题描述

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

问题:- 插入时间为 10 秒。当 Select 被触发时(在 5 秒内),直到那个时间之前的插入还没有完成。因此,正在插入多条记录。此外,触发器也被再次触发。

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

标签: postgresqlselectconcurrencyinsert

解决方案


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

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

如果这样做,您还可以使用insert ... on conflict do update ...which is safe to use with concurrent inserts。


推荐阅读