vitya_brodov
@vitya_brodov
Java dev

Как работает блокировка в Postgresql?

Есть пример запроса который блокирует запись:
select * from payment_detail where status = ?1 order by saved_at for update skip locked limit ?2


для чего это запрос
:
spoiler
Ест в API крон, который каждые N секунд обновляет данные, так как это происходит слишком медленно и очередь забивается Я решил поднять три экземпляра API. чтобы не было конфликтов при выборке данных из бд решил заблочить выбранные данные


Вопрос: Блокировка работает только для выбранных записей и как оно под капотом работает?

P.s Буду благодарен за развернутый ответ)
  • Вопрос задан
  • 89 просмотров
Решения вопроса 2
@Vitsliputsli
Да, блокировка осуществляется только для выбранных записей, они блокируются до выполнения update. Пока они заблокированы, другие select for update skip locked их не увидят.
Ответ написан
Комментировать
Melkij
@Melkij
PostgreSQL DBA
если кратко: https://github.com/postgres/postgres/blob/REL_15_S...

только требуемые строки, в select for update (и родственниках) это видно отдельным LockRows плана выполнения
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы