【发布时间】:2019-04-16 17:36:26
【问题描述】:
我的 PostgreSQL 10.5 数据库中有以下语句,我在 repeatable read 事务中执行:
delete from task
where task.task_id = (
select task.task_id
from task
order by task.created_at asc
limit 1
for update skip locked
)
returning
task.task_id,
task.created_at
不幸的是,当我运行它时,我有时会得到:
[67] ERROR: could not serialize access due to concurrent update
[67] STATEMENT: delete from task
where task.task_id = (
select task.task_id
from task
order by task.created_at asc
limit $1
for update skip locked
)
returning
task.task_id,
task.created_at
这意味着事务回滚,因为其他一些事务同时修改了记录。 (我认为?)
我不太明白这个。不同的事务如何修改使用for update skip locked 选择并删除的记录?
【问题讨论】:
标签: sql postgresql transactions isolation-level locks