Организация блокировок с пропуском заблокированных
Версия 1.6 от Alexandr Fokin на 2024/03/16 20:49
Пессимистичная блокировка | ||
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; | Данный подход может комбинироваться с вышестоящим. ЗАМЕЧАНИЕ: быть аккуратнее при использовании условий с JOIN или сортировке, чтобы не блокировать больше строк, чем нужно. Postgres pg_try_advisory_lock blocks all records select g.id from ( SELECT g.id, pg_catalog.pg_try_advisory_xact_lock(-1, pg_catalog.uuid_hash(g.id)) as locked FROM table1 AS t1 join table2 as r2 on --WHERE rules ) g where g.locked LIMIT 20; |