sql >> Databasteknik >  >> RDS >> PostgreSQL

INFOGA och serialisering av transaktioner i PostreSQL

I allmänhet nej. Den andra transaktionen är endast infogning, så om det inte finns en unik indexkontroll eller annan trigger som behöver äga rum, kan data infogas ovillkorligt. I fallet med ett unikt index (inklusive primärnyckel) blockeras det om båda transaktionerna uppdaterar rader med samma värde, t.ex.:

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

Saker och ting är mindre uppenbara när det gäller uppdateringar som kan påverka infogning av den andra transaktionen. Jag förstår att PostgreSQL ännu inte stöder "äkta" serialiserbarhet i det här fallet. Jag vet inte hur ofta det stöds av andra SQL-system.

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



  1. MySQL LIKE IN()?

  2. PostgreSQL-utlösare för att generera koder för flera tabeller dynamiskt

  3. Postgres LEFT JOIN med SUM, saknade poster

  4. Hur man bevarar databasanslutning i en python-webbserver