PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

INSERT et sérialisation des transactions dans PostreSQL

Généralement, non. La deuxième transaction est l'insertion uniquement, donc à moins qu'une vérification d'index unique ou un autre déclencheur ne doive avoir lieu, les données peuvent être insérées sans condition. Dans le cas d'un index unique (y compris la clé primaire), il se bloquera si les deux transactions mettent à jour des lignes avec la même valeur, par exemple :

-- 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

Les choses sont moins évidentes dans le cas des mises à jour qui peuvent affecter les insertions par l'autre transaction. Je comprends que PostgreSQL ne prend pas encore en charge la "vraie" sérialisabilité dans ce cas. Je ne sais pas dans quelle mesure il est couramment pris en charge par d'autres systèmes SQL.

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