gpt4 book ai didi

postgresql - 并发访问行 : making locked rows "invisible"

转载 作者:行者123 更新时间:2023-11-29 14:37:25 24 4
gpt4 key购买 nike

长话短说。我想让锁定的行对后续查询不可见,直到锁定被释放。

我正在开发一个依赖并发访问数据的应用程序。

我有需要处理的数据,以及需要在同一组数据上运行的数千个 SQL 查询。在应用程序级别,我将所有 SQL 查询序列化到一个大队列中,并在事务中一个一个地执行它们。

但是,我想消除我在应用程序级别造成的这个人为“队列”瓶颈,完全依赖于 DB 的内置并发原语和基于游标的数据访问的组合。

为此,我需要确保两个并发 SQL 查询永远不会获取相同的集合行,例如前面的查询锁定行,后面的查询忽略锁定的行。

我希望下图能够工作(示例有意简化;考虑每个 SELECT 使用基于游标的访问在事务中运行)。

SELECT * FROM my_table ORDER BY id LIMIT 5; -- returns rows with IDs 1, 2, 3, 4, 5
SELECT * FROM my_table ORDER BY id LIMIT 5; -- returns rows with IDs 6, 7, 8, 9, 10

我的问题是:这甚至可以做到吗?还是我对 DB 的要求太多了?

最佳答案

使用 PostgreSQL 9.5 或更高版本,您可以在事务中执行此操作:

SELECT * FROM my_table
ORDER BY id
LIMIT 5
FOR UPDATE SKIP LOCKED;

关于postgresql - 并发访问行 : making locked rows "invisible",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42206462/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com