PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

INSERT e serializzazione delle transazioni in PostreSQL

In genere, no. La seconda transazione è solo di inserimento, quindi a meno che non sia necessario eseguire un controllo dell'indice univoco o un altro trigger, i dati possono essere inseriti incondizionatamente. Nel caso di un indice univoco (compresa la chiave primaria), si bloccherà se entrambe le transazioni stanno aggiornando righe con lo stesso valore, ad es.:

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

Le cose sono meno evidenti nel caso di aggiornamenti che potrebbero influire sugli inserimenti dell'altra transazione. Comprendo che PostgreSQL non supporta ancora la serializzabilità "vera" in questo caso. Non so quanto sia comunemente supportato da altri sistemi SQL.

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