В чем разница между стратегиями блокировок SELECT ... FOR UPDATE и SELECT ... FOR SHARE? Опишите практический кейс для каждой.

В PostgreSQL FOR UPDATE блокирует конкурирующие изменения и несовместимые row locks выбранных строк; FOR SHARE разрешает совместные share locks, но блокирует UPDATE и DELETE этих строк.

Короткий ответ

Что ответить на собеседовании

В PostgreSQL FOR UPDATE блокирует конкурирующие изменения и несовместимые row locks выбранных строк; FOR SHARE разрешает совместные share locks, но блокирует UPDATE и DELETE этих строк.

Подробный разбор

Ответ с пояснениями

В PostgreSQL FOR UPDATE блокирует конкурирующие изменения и несовместимые row locks выбранных строк; FOR SHARE разрешает совместные share locks, но блокирует UPDATE и DELETE этих строк.

FOR UPDATE подходит для чтения остатка перед согласованным изменением внутри транзакции. FOR SHARE — для проверки объекта, который не должен измениться до завершения связанного действия, пока другие проверяющие могут читать его так же. Обычный SELECT благодаря MVCC обычно не блокируется этими row locks. Блокировки удерживаются до завершения транзакции. Соблюдайте единый порядок захвата, задавайте таймауты и учитывайте deadlock; не держите locks во время долгого внешнего HTTP-вызова.

Источник: www.postgresql.org.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее