FOR UPDATE конфликтует со всеми четырьмя режимами. NO KEY UPDATE допускает KEY SHARE; SHARE допускает SHARE и KEY SHARE; KEY SHARE блокирует UPDATE, но совместим с остальными названными режимами.
Объясните различия и совместимость строчных блокировок 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, но совместим с остальными названными режимами.
Это совместимость блокировок одной строки между разными транзакциями. Более сильные режимы защищают изменение или удаление строки, KEY SHARE — прежде всего от удаления и изменения ключа. Блокировки удерживаются до конца транзакции и могут вызвать ожидание или deadlock. Оптимистичный подход вместо предварительного удержания lock проверяет версию при UPDATE и обнаруживает конфликт по числу изменённых строк. При конфликте приложение повторяет или отклоняет операцию.
Источник: www.postgresql.org.