Это зависит от текущего снимка .
READ COMMITTED
транзакции делают новый снимок для каждого запроса, в то время как транзакции REPEATABLE READ
и SERIALIZABLE
делают снимок при первом запросевыполняется и хранит его на протяжении всей транзакции.
Снимок определяется как struct SnapshotData
в include/utils/snapshot.h
и по существу содержит следующее:
aминимальный идентификатор транзакции xmin
: для этого снимка видны все более старые транзакции.
максимальный идентификатор транзакции xmax
: все последующие транзакции не видны для этого снимка.
массив идентификаторов транзакций xid
, который содержит все промежуточные транзакции, которые не видны для этого снимка.
Чтобы определить, является ли кортеж видимымдля моментального снимка его xmin
должен быть видимым идентификатором подтвержденной транзакции, а xmax
не должен быть видимым идентификатором подтвержденной транзакции.
Чтобы определить, зафиксирована транзакция или нет, Журнал коммитов необходимо просмотреть, если биты подсказок кортежа (которые кешируют эту информацию) уже не были установлены.