В документации PostgreSQL часто упоминается некий snapshot, который очень важен для выполнения запросов. Так что же он и себя представляет?
В упрощенном виде снапшот можно представить как набор номеров транзакций. Снапшот делается на момент времени, и можно сказать, что он привязан к этому моменту времени. Но можно сказать и наоборот - что на основе снапшота из БД можно получить срез данных на момент времени, когда снапшот был сделан. Таким образом с помощью снапшотов можно получать срезы данных на произвольный момент времени (есть ограничения).
Технически снапшот состоит из трех полей.
Транзакции, номера (txid) который попадают в интервал xmin <= txid < xmax и которых нет в списке xip_list, считаются завершенными. Так же считаются завершенными транзакции, номера которых меньше xmin.
С помощью такой структуры данных в PostgreSQL есть возможность хранить и обрабатывать срезы данных в любом моменте времени.
Совет
Есть ограничения, которые в реальности не позволяют PostgreSQL хранить данные на любой момент времени. Но обзор этих ограничений выходит за рамки этой статьи.