Использую СУБД PGSQL.
Нужно получить мин. значение CreateDate из таблицы документ
SELECT MIN("CreateDate")
FROM "Document"
если минимальная дата < текущей в цикле вешается транзация и пересчитывается поле CreateDate, достаю записи таким запросом:
SELECT *
FROM "Document"
WHERE "CreateDate" < NOW()::DATE
ORDER BY "CreateDate"
LIMIT 10
FOR UPDATE SKIP LOCKED
UPDATE "Document"
SET "CreateDate" = ...
...
Насколько понимаю логику работы SELECT FOR UPDATE SKIP LOCKED при паральленых вызовах будут взяты не заблокированные записи. Как понимаю проблема будет возникать при получении мин. значение CreateDate,
SELECT MIN("CreateDate")
FROM "Document"