Организация блокировок с пропуском заблокированных
Версия 1.3 от Alexandr Fokin на 2024/02/07 21:15
Пессимистичная блокировка | ||
https://postgrespro.ru/docs/postgresql/12/functions-admin | ||
Блокировка через основной механизм БД | Begin; select * from table FOR UPDATE SKIP LOCKED; --action Commit; | |
Рекомендательные блокировки | Begin; select * from table where -- (table or action key, rowKey) pg_try_advisory_xact_lock(1, id) -- or pg_try_advisory_xact_lock(1, uuid_hash(guidId)) -- action Commit; | Данный подход может комбинироваться с вышестоящим. Пример: Мы сначала отбираем батч id, чтобы потом обработать каждую запись в отдельной транзакции. Мы не хотим блокировать сами строки, но также не хотим, чтобы другой (параллельный) обработчик отбирал их к себе. Мы можем использовать рекомендательную блокировку. При этом при обработке каждой строки отдельной транзакцией мы накладываем For Update. |