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