SQLRU.net
Разработка приложений баз данных

Начало » Использование СУБД » PostgreSQL » Логика работы SELECT FOR UPDATE
Логика работы SELECT FOR UPDATE [сообщение #1985] Wed, 05 April 2023 03:08 Переход к следующему сообщению
polin11 в настоящее время не в онлайне  polin11
Сообщений: 6
Зарегистрирован: January 2023
Junior Member
Использую СУБД 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"
заблокированные записи будут пропущены и актуальное значение не получить.
Подскажите пож-ста можно как-то исправить эту проблему?
Re: Логика работы SELECT FOR UPDATE [сообщение #1987 является ответом на сообщение #1985] Wed, 05 April 2023 13:30 Переход к предыдущему сообщению
МП в настоящее время не в онлайне  МП
Сообщений: 795
Зарегистрирован: August 2022
Географическое положение: бурятский тун...
Senior Member
заблокированы они для ИЗМЕНЕНИЯ.
но не для чтения.
Предыдущая тема: Сделать 2 поля уникальными, для определённого значения одного из них.
Следующая тема: Вопрос по бэкапам
Переход к форуму:
  


Текущее время: Thu Apr 18 17:59:23 GMT+3 2024

Общее время, затраченное на создание страницы: 0.00599 секунд