问题标签 [select-for-update]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
160 浏览

django - django select_for_update 获取关系锁

我有这个代码示例应该在 postgres 中采用行(元组)锁定,但它似乎采用表(关系)锁定:

通过在事务期间查看 pg_locks 我可以看到:

在此处输入图像描述

据我所知,我应该在 locktype 中看到“元组”,因为我只锁定特定行而不是整个表

0 投票
1 回答
32 浏览

python - Django - 将查询集中的单个记录分配给用户并更新它。仅在事务失败时才将记录发布给另一个用户

我是 Django 初学者,我正在尝试在 Django 中创建一个仓库管理系统。系统跟踪哪些产品进入仓库,因此知道仓库中有什么以及在哪个位置。

有几个用户(订单拣货员)同时登录并且必须从仓库中获取产品。

我的模型如下所示:

必须在某一天从仓库中提取的产品必须满足多个条件。

例如:

  • available_for_picking = 今天或过去的日期

  • aldready_picked = False

我想做的事:

每个用户访问 url:www.mydomain.com/get_order_location_to_pick并获取他必须从仓库提取的产品的位置。

但是,有几种产品符合选择标准,并且有多个用户同时使用该软件。所以我想避免将相同的产品(和位置)分配给超过 1 个用户。当用户拿走产品后,布尔值“already_picked”应从 False 更改为 True。如果用户由于某种原因无法从仓库中取回分配给他的产品,则当他/她访问相同的 url www.mydomain.com/get_order_location_to_pick时,该产品必须分配给另一个用户

有什么好方法可以做到这一点?

在我看来,我目前有这个:

这真的行不通。它只是从 QuerySet 中提供相同的产品,并将其分配给当前访问 url www.mydomain.com/get_order_location_to_pick的所有用户

我读过一些关于 Django 函数 select_for_update() 的内容,但我并没有完全理解它的作用。这是我在忙于在仓库中寻找产品时用来将第一个产品“锁定”给第一个用户的东西吗?

在某种程度上,我试图在用户对其执行操作时将查询集中的单个记录分配给用户,并且仅在事务不成功时才使该对象再次可供其他用户使用。

0 投票
0 回答
14 浏览

django - Django 在测试中选择更新行为

在试图了解 django 的 select_for_update 时,我创建了一个测试来查看。据我了解,如果有两个进程,一个在事务内部选择更新,另一个在事务结束之前尝试在其他进程中写入锁定的行,写入将失败。但是,以下测试通过了。有什么问题?