Atomic UPDATE.. SELECT в Postgres

Я создаю своего рода механизм очередей. Есть строки данных, которые необходимо обработать, и флаг состояния. Я использую пункт update.. returningдля управления им:

UPDATE stuff
SET computed = 'working'
WHERE id = (SELECT id from STUFF WHERE computed IS NULL LIMIT 1)
RETURNING * 

Является ли вложенная часть выбора той же блокировкой, что и обновление, или у меня здесь состояние гонки? Если да, то должен ли внутренний выбор быть select for update?

46
задан Erwin Brandstetter 29 March 2015 в 01:47
поделиться