Domanda

Ho una domanda. livello di isolamento è impostato su serializzabile. Quando l'un utente apre una transazione e inserisce o aggiorna i dati in "tabella 1" e poi un altro utente apre una transazione e cerca di dati Inserisci per lo stesso tavolo, fa la seconda esigenza all'utente di attendere 'til il primo utente si impegna la transazione?

È stato utile?

Soluzione

In generale, no. La seconda operazione sta inserendo solo, quindi a meno che ci sia un controllo indice univoco o altro trigger che deve avvenire, i dati possono essere inseriti senza condizioni. Nel caso di un indice univoco (compresa chiave primaria), bloccherà quando le prestazioni aggiornano le righe con lo stesso valore, per esempio:.

-- 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 possono influenzare gli inserimenti dalla altra transazione. Capisco PostgreSQL non supporta ancora "vero" serialisability in questo caso. Non so come comunemente supportato sia da altri sistemi SQL.

http://www.postgresql.org/docs/current/ interattivo / mvcc.html

Altri suggerimenti

Il secondo utente sarà bloccato fino a quando i primi commit utente o il rollback suo / la sua modifica.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top