gpt4 book ai didi

elixir - 使用 Ecto/Elixir 锁定行 "FOR UPDATE OF"特定表

转载 作者:行者123 更新时间:2023-12-02 03:19:50 24 4
gpt4 key购买 nike

我想使用FOR UPDATE OF table_name 获取。与FOR UPDATE相比,FOR UPDATE OF仅锁定指定表中的行,并且不会阻止连接的行。但是,当我尝试使用以下代码片段使用 Ecto 执行此操作时,它失败了。

query =
Call
|> join_other_tables() # custom methods
|> Query.lock("FOR UPDATE OF calls")

原因是 Ecto 使用了调用的别名,例如c0,这意味着我还必须在锁定表达式中使用别名才能使其正常工作.

query =
Call
|> join_other_tables() # custom methods
|> Query.lock("FOR UPDATE OF c0")

使用别名看起来不是一个正确的方法。还有其他方法可以让它工作吗?

最佳答案

Ecto v3 开始,无法将参数化值传递给 Query.lock。它接受binaries only .

[命名绑定(bind)]也不起作用,因为Ecto内部generates aliases as it wants .


以下方法是最接近的方法,但它也不起作用,因为 Ecto.Query.lock/2 不允许插值。

使用Ecto.Query.API.fragment ,具有插值能力,具有关键字查询语法。有点像:

from c in Call,
join: ..., # custom methods
lock: fragment("FOR UPDATE OF ?", c)

关于elixir - 使用 Ecto/Elixir 锁定行 "FOR UPDATE OF"特定表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55129239/

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