Объясните различия и совместимость строчных блокировок PostgreSQL: SELECT ... FOR UPDATE, FOR NO KEY UPDATE, FOR SHARE и FOR KEY SHARE. Чем они отличаются от оптимистичной блокировки?

FOR UPDATE конфликтует со всеми четырьмя режимами. NO KEY UPDATE допускает KEY SHARE; SHARE допускает SHARE и KEY SHARE; KEY SHARE блокирует UPDATE, но совместим с остальными названными режимами.

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

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

FOR UPDATE конфликтует со всеми четырьмя режимами. NO KEY UPDATE допускает KEY SHARE; SHARE допускает SHARE и KEY SHARE; KEY SHARE блокирует UPDATE, но совместим с остальными названными режимами.

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

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

FOR UPDATE конфликтует со всеми четырьмя режимами. NO KEY UPDATE допускает KEY SHARE; SHARE допускает SHARE и KEY SHARE; KEY SHARE блокирует UPDATE, но совместим с остальными названными режимами.

Это совместимость блокировок одной строки между разными транзакциями. Более сильные режимы защищают изменение или удаление строки, KEY SHARE — прежде всего от удаления и изменения ключа. Блокировки удерживаются до конца транзакции и могут вызвать ожидание или deadlock. Оптимистичный подход вместо предварительного удержания lock проверяет версию при UPDATE и обнаруживает конфликт по числу изменённых строк. При конфликте приложение повторяет или отклоняет операцию.

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

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

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

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

Подробнее