Postgres 10
我正在尝试使用“ FOR UPDATE SKIP LOCKED”在Postgres中创建工作队列。
我的目标是通过使用“ ROLLBACK TO SAVEPOINT;”将状态设置为“完成”或“失败”。如果处理失败。
我希望下面的代码会导致最终状态为“失败”,但看来最终状态为“正在等待”。
BEGIN;
DROP TABLE IF EXISTS foo;
SELECT id
INTO foo
FROM jobs
WHERE status = 'waiting'
AND status != 'failed'
ORDER BY created ASC
FOR UPDATE SKIP LOCKED
LIMIT 1;
UPDATE jobs SET status = 'failed' WHERE id = (SELECT id from foo) RETURNING *;
SAVEPOINT blah;
UPDATE jobs SET status = 'complete' WHERE id = (SELECT id from foo) RETURNING *;
ROLLBACK TO SAVEPOINT blah;
任何人都可以建议我该怎么做才能使用COMMIT来使状态“完成”或回滚到保存状态等等以使状态“失败”吗?
谢谢!
答案 0 :(得分:0)
看来您根本没有承诺,所以从外面看,直到您这样做都看不到任何变化。