Control de concurrencia multiversión (MVCC)
¿Qué es MVCC en PostgreSQL?
MVCC permite que las lecturas y las escrituras se ejecuten al mismo tiempo: cada sentencia ve una instantánea de los datos, y las actualizaciones escriben nuevas versiones de las filas en lugar de sobrescribir las filas existentes.
El control de concurrencia multiversión (MVCC) es la forma en que PostgreSQL mantiene la coherencia de las transacciones concurrentes sin hacer que se esperen entre sí. Cada sentencia ve una instantánea de los datos tal como estaban en un momento dado, así que leer nunca bloquea la escritura y escribir nunca bloquea la lectura.
Internamente, un UPDATE escribe una nueva versión de la fila y marca la versión anterior como caducada. Las columnas de sistema ocultas xmin y xmax registran qué transacciones crearon y caducaron cada versión. Las versiones antiguas permanecen en la tabla hasta que VACUUM las elimina, por eso las transacciones muy largas pueden hacer que las tablas crezcan.
Ejemplo
El ejemplo lee la columna oculta xmin antes y después de un UPDATE. El valor cambia porque la actualización escribió una nueva versión de la fila marcada con el ID de la transacción que la actualizó.
CREATE TABLE accounts (id int PRIMARY KEY, balance int);
INSERT INTO accounts VALUES (1, 100);
SELECT xmin, xmax, * FROM accounts;
UPDATE accounts SET balance = 90 WHERE id = 1;
SELECT xmin, xmax, * FROM accounts;SQL simple para PostgreSQL 16 o 17 estándar, sin extensiones. Ejecútalo en una base de datos vacía que puedas descartar.
Fuentes
Documentación oficial de PostgreSQL (en inglés).