Транзакции, выполняющиеся под уровнем изоляции snapshot, получают исключительные блокировки данных перед выполнением модификаций только для поддержания ограничений. В противном случае блокировки на данные не устанавливаются, пока не будут изменены данные. Если данные строки соответствуют критериям обновления, то транзакция snapshot проверяет, не были ли изменены и подтверждены изменения данных этой строки в конкурентной транзакции после того, как была запущена текущая транзакция. Если данные в строке были модифицированы в конкурентной транзакции, то возникает конфликт, и транзакция snapshot завершается. Конфликт обновления обрабатывается системой базы данных, поэтому не существует способа отмены проявления конфликта обновления.
Реализация уровня изоляции snapshot является процессом, состоящим из двух шагов. Во-первых, нужно установить опцию для базы данных allow_snapshot_isolation. Во-вторых, для каждой сессии, которая будет использовать этот уровень изоляции, нужно задать для оператора set transaction isolation level значение snapshot. Когда установлены эти опции, будут создаваться версии для всех строк, изменяемых в базе данных.