postgresql - 如何在 postgres 中处理并发请求?
问题描述
场景:- 有一个表 X。当新请求到来时,使用“选择”检查记录的存在,如果使用插入未找到记录,则将数据插入到表中。一旦“插入”发生,触发器就会在表 X 上触发
问题:- 插入时间为 10 秒。当 Select 被触发时(在 5 秒内),直到那个时间之前的插入还没有完成。因此,正在插入多条记录。此外,触发器也被再次触发。
如何解决这个问题?有什么建议可以克服这种情况吗?
解决方案
在插入新行之前使用 SELECT 语句以防止重复行永远不会正常工作(至少不能以可接受的性能)。
在您的表上创建一个唯一键或约束,以防止插入重复值并处理发生的任何错误。
如果这样做,您还可以使用insert ... on conflict do update ...
which is safe to use with concurrent inserts。
推荐阅读
- spring - 认证后重定向到白级错误页面
- node.js - 计算一系列地址的掩码
- mysql - InnoDB二级索引包含值而不是指向PK的指针,怎么够?
- haskell - 使用 Aeson 时如何使用 sum 类型作为 map 中的键?
- node.js - 无法通过 Google Cloud Vision API 处理 PDF
- python - 如何使用 gitpython repo.archive() 作为标签
- javascript - 填充数据后 Javascript 为空
- algorithm - 使用最小优先级队列时,如何跟踪 Dijkstra 算法中的最短路径?
- java - 如何使用 apache-poi 将数据透视表样式从默认蓝色更改为其他颜色
- javascript - 如何在单独的js文件中实现类构造函数中的路由器(express)