sql >> Base de Datos >  >> RDS >> PostgreSQL

INSERT y serialización de transacciones en PostreSQL

Generalmente, no. La segunda transacción es solo de inserción, por lo que, a menos que haya una verificación de índice única u otro desencadenante que deba realizarse, los datos se pueden insertar incondicionalmente. En el caso de un índice único (incluida la clave principal), se bloqueará si ambas transacciones actualizan filas con el mismo valor, por ejemplo:

-- Session 1                           -- Session 2
CREATE TABLE t (x INT PRIMARY KEY);
BEGIN;
INSERT INTO t VALUES (1);
                                       BEGIN;
                                       INSERT INTO t VALUES (1);  -- blocks here
COMMIT;
                                       -- finally completes with duplicate key error

Las cosas son menos obvias en el caso de actualizaciones que pueden afectar las inserciones de la otra transacción. Entiendo que PostgreSQL aún no admite la serialización "verdadera" en este caso. No sé con qué frecuencia lo admiten otros sistemas SQL.

Ver http://www.postgresql.org/docs/current/interactive/ mvcc.html