PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

INSERT e serialização de transações no PostreSQL


Geralmente, não. A segunda transação é apenas de inserção, portanto, a menos que haja uma verificação de índice exclusiva ou outro gatilho que precise ocorrer, os dados podem ser inseridos incondicionalmente. No caso de um índice único (incluindo chave primária), ele será bloqueado se ambas as transações estiverem atualizando linhas com o mesmo valor, por exemplo:
-- 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

As coisas são menos óbvias no caso de atualizações que podem afetar as inserções da outra transação. Eu entendo que o PostgreSQL ainda não suporta serialização "verdadeira" neste caso. Eu não sei como é comumente suportado por outros sistemas SQL.

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