【发布时间】:2022-01-21 17:35:43
【问题描述】:
我有一个包含这 3 列的表格:
- 任务(字符串)
- 状态(字符串)
- 日期(日期时间)
我想编写一个执行以下操作的查询:
-
选择第一行
WHERE status != "In-Progress"按日期排序(最早的在前),并锁定它 - 因此同时运行此查询的其他计算机无法读取它。 -
更新状态列,以便
status = "In-Progress"。 - 返回行的列(类似于常规的
Select *语句)。
如何编写此查询?
我主要担心的是,无论有多少并发实例正在运行,该行只能由 1 台计算机获取。
【问题讨论】:
-
This answer 显示了一种锁定表格特定行的方法。
-
您想对同样并行运行此进程并发现行锁定的另一个会话发生什么?
-
理想情况下,我希望该行根本不会出现在其他查询中。
标签: sql postgresql concurrency sql-update queue