Рассмотрев вопросы, связанные с
изоляцией, и сделав отступление об
организации данных на низком уровне, мы в прошлый раз подробно поговорили о
версиях строк и проследили, как изменяется служебная информация в заголовке версии при различных операциях.
Сегодня мы посмотрим на то, как из версий строк получаются согласованные снимки данных.
Что такое снимок данных
Физически в страницах данных могут находиться несколько версий одной и той же строки. При этом каждая транзакция должна видеть только одну (или ни одной) версию каждой строки так, чтобы вместе они составляли согласованную в ACID-смысле картину данных на определенный момент времени.
Изоляция в PostgreSQL строится на основе снимков данных (snapshot): каждая транзакция работает со своим снимком данных, который «содержит» данные, которые были зафиксированы до момента создания снимка, и не «содержит» еще не зафиксированные на этот момент данные. Мы
уже видели, что изоляция при этом получается более строгая, чем требует стандарт, но не лишенная аномалий.