sql >> Databáze >  >> RDS >> PostgreSQL

INSERT a serializace transakcí v PostreSQL

Obecně ne. Druhá transakce je pouze vkládání, takže pokud není třeba provést jedinečnou kontrolu indexu nebo jiný spouštěč, lze data vložit bezpodmínečně. V případě jedinečného indexu (včetně primárního klíče) se zablokuje, pokud obě transakce aktualizují řádky se stejnou hodnotou, např.:

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

Věci jsou méně zřejmé v případě aktualizací, které mohou ovlivnit vložení jinou transakcí. Chápu, že PostgreSQL v tomto případě ještě nepodporuje "skutečnou" serializaci. Nevím, jak běžně to podporují jiné systémy SQL.

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



  1. Instalace GCC na Oracle Solaris 11

  2. Spustit SQL Trigger pouze tehdy, když konkrétní uživatel aktualizuje řádek

  3. Uvolněte místo na disku po stažení databáze v mysql

  4. SQLSTATE[23000]:Zpracování chyb porušení integritního omezení