Ale*_*lex 1 postgresql concurrency update postgresql-9.4
我正在努力处理随机返回多行而不是一行的查询。我正在使用 PostgreSQL 9.4.12
查询如下:
UPDATE folder as f set locked = 'locked', date_locked = current_timestamp
from (
SELECT * from folder as f2
WHERE f2.locked = 'available'
LIMIT 1 FOR UPDATE ) as folderToUpdate
WHERE f.id = folderToUpdate.id returning f.*
Run Code Online (Sandbox Code Playgroud)
的id是主键。
它是通过一系列集成测试执行的。当我只执行上述查询的测试时,我没有任何问题。但是,当我执行所有测试时,我随机得到多行。你有什么建议吗?
你得到多行是很正常的。更新从文件夹中选择所有行,并为它们中的每一个从文件夹 f2 中选择一行(我猜是一样的,如果 id 是 PK)。如果locked = 'available',则更新记录。进入下一行。
正确的语法在这里,Postgres UPDATE ... LIMIT 1,包括使用 CTE。
如果没有 CTE,您的结果取决于 PostgresSQL 决定如何执行您的更新,从外部(多行是可能的)或内部选择开始。
| 归档时间: |
|
| 查看次数: |
1901 次 |
| 最近记录: |