Чем отличается пессимистическая блокировка от оптимистической в PostgreSQL?

Оптимистическая блокировка, наоборот, предполагает, что конфликты редки, и не ставит блокировки при чтении.

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

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

Оптимистическая блокировка, наоборот, предполагает, что конфликты редки, и не ставит блокировки при чтении. Вместо этого при сохранении изменений проверяется, не изменились ли данные с момента чтения (например, по версии или контрольной сумме). Если данные изменились, транзакция откатывается или повторяется.

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

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

Пессимистическая блокировка в PostgreSQL предполагает, что конфликты при доступе к данным вероятны, поэтому блокировки устанавливаются сразу при чтении или изменении данных, чтобы предотвратить одновременные изменения. Например, при использовании SELECT ... FOR UPDATE строки блокируются для других транзакций.

Оптимистическая блокировка, наоборот, предполагает, что конфликты редки, и не ставит блокировки при чтении. Вместо этого при сохранении изменений проверяется, не изменились ли данные с момента чтения (например, по версии или контрольной сумме). Если данные изменились, транзакция откатывается или повторяется.

В PostgreSQL оптимистическая блокировка реализуется на уровне приложения, например, с помощью поля версии (timestamp или счетчика). Пессимистическая блокировка — встроенный механизм СУБД.

Пример пессимистической блокировки:

BEGIN;
SELECT * FROM orders WHERE id = 1 FOR UPDATE;
-- изменения
COMMIT;

Оптимистическая блокировка требует дополнительной логики в приложении.

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

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

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

Подробнее