За последние 24 часа нас посетили 17340 программистов и 986 роботов. Сейчас ищут 476 программистов ...

Логика работы SELECT FOR UPDATE

Тема в разделе "PostgreSQL", создана пользователем polin11, 5 апр 2023.

  1. polin11

    polin11 Активный пользователь

    С нами с:
    22 янв 2019
    Сообщения:
    20
    Симпатии:
    0
    Использую СУБД PGSQL.

    Нужно получить мин. значение CreateDate из таблицы документ
    Код (Text):
    1. SELECT MIN("CreateDate")
    2. FROM "Document"
    если минимальная дата < текущей в цикле вешается транзакция и пересчитывается поле CreateDate, достаю записи
    таким запросом:
    Код (Text):
    1. SELECT *
    2. FROM "Document"
    3. WHERE "CreateDate" < NOW()::DATE
    4. ORDER BY "CreateDate"
    5. LIMIT 10
    6. FOR UPDATE SKIP LOCKED
    Обновление записей
    Код (Text):
    1. UPDATE "Document"
    2. SET "CreateDate" = ...
    3. ...

    Насколько понимаю логику работы SELECT FOR UPDATE SKIP LOCKED при паральленых вызовах
    будут взяты не заблокированные записи.
    Как понимаю проблема будет возникать при получении мин. значение CreateDate,
    Код (Text):
    1. SELECT MIN("CreateDate")
    2. FROM "Document"
    заблокированные записи будут пропущены и актуальное значение не получить.
    Подскажите пож-ста можно как-то исправить эту проблему?