En PostgreSQL, cada actualización de tupla crea una nueva versión de tupla. Entonces, durante un período de tiempo, puede haber muchas versiones de la misma tupla y diferentes transacciones pueden ver una versión diferente de la tupla (usando reglas de visibilidad)
El índice se actualiza antes de que se complete la transacción. ¿Cómo funciona esto con SI?
Entonces, cuando una transacción actualizó la tupla, ¿entonces la entrada del índice se actualizó para apuntar a la nueva versión de la tupla?
Dado que PostgreSQL implementa MVCC al mantener varias versiones de una fila en la tabla al mismo tiempo, también mantiene múltiples entradas de índice para diferentes versiones de una sola fila (a veces esto se puede evitar con tuplas de solo montón si las entradas indexadas no se modifican durante una actualización y la fila actualizada está en el mismo bloque de la tabla que la versión original).
La información de visibilidad no se almacena en el índice, por lo que para encontrar la versión de fila correcta durante un escaneo de índice, se deben verificar las entradas de la tabla para todas estas entradas de índice (a veces esto se puede evitar si se sabe que un bloque de índice contiene solo entradas que son visibles para todos; este es un escaneo de solo índice ).
Las entradas de índice antiguas se eliminan junto con las entradas de tabla antiguas durante el autovacío.