В PostgreSQL FOR UPDATE блокирует конкурирующие изменения и несовместимые row locks выбранных строк; FOR SHARE разрешает совместные share locks, но блокирует UPDATE и DELETE этих строк.
В чем разница между стратегиями блокировок 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 этих строк.
FOR UPDATE подходит для чтения остатка перед согласованным изменением внутри транзакции. FOR SHARE — для проверки объекта, который не должен измениться до завершения связанного действия, пока другие проверяющие могут читать его так же. Обычный SELECT благодаря MVCC обычно не блокируется этими row locks. Блокировки удерживаются до завершения транзакции. Соблюдайте единый порядок захвата, задавайте таймауты и учитывайте deadlock; не держите locks во время долгого внешнего HTTP-вызова.
Источник: www.postgresql.org.