Sql 在Postgres中,是否可以使用回滚到保存点来实现;“尝试”;当使用;对于更新跳过锁定“;?

Sql 在Postgres中,是否可以使用回滚到保存点来实现;“尝试”;当使用;对于更新跳过锁定“;?,sql,postgresql,transactions,Sql,Postgresql,Transactions,博士后10 我在Postgres中有一个表,其中表行是工作队列项。工作进程抓取一行并对其进行一些处理 sql = """BEGIN; UPDATE jobs SET status = 'complete' WHERE id = ( SELECT id FROM jobs WHERE status = 'finished_waiting' AND status != 'failed' ORDER BY created ASC FOR UPDATE SKIP LOCKED

博士后10

我在Postgres中有一个表,其中表行是工作队列项。工作进程抓取一行并对其进行一些处理

sql = """BEGIN;
UPDATE jobs SET status = 'complete'
WHERE id = (
  SELECT id
  FROM jobs
  WHERE status = 'finished_waiting'
  AND status != 'failed'
  ORDER BY created ASC 
  FOR UPDATE SKIP LOCKED
  LIMIT 1
)
RETURNING *;
"""
我现有的代码在上面。如果处理成功,则发出“提交”,如果失败,则发出“回滚”

我使用Postgres的“FOR UPDATE SKIP LOCKED”特性来安全地抓取和处理每一行,如果处理失败,该行将以其原始状态返回表进行重新处理

但我需要有某种“尝试”功能,这样反复失败的任务行就不会继续被无限地处理


我正在阅读有关“回滚到保存点”的文章,我想知道在处理失败且事务回滚的情况下,是否可以使用它来增加“尝试次数”表列?

当然。在
选择之后设置一个保存点。。。用于更新

如果处理失败,请回滚到保存点,递增
尝试次数
并提交