sql >> Database teknologi >  >> RDS >> PostgreSQL

INSERT og transaktionsserialisering i PostreSQL

Generelt nej. Den anden transaktion er kun indsættelse, så medmindre der er en unik indekskontrol eller anden trigger, der skal finde sted, kan dataene indsættes ubetinget. I tilfælde af et unikt indeks (inklusive primærnøgle), vil det blokere, hvis begge transaktioner opdaterer rækker med samme værdi, f.eks.:

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

Ting er mindre indlysende i tilfælde af opdateringer, der kan påvirke indsættelser af den anden transaktion. Jeg forstår, at PostgreSQL endnu ikke understøtter "ægte" serialisering i dette tilfælde. Jeg ved ikke, hvor almindeligt det understøttes af andre SQL-systemer.

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



  1. Forespørg punkter inden for en given radius i MySQL

  2. Oracle MIN som analytisk funktion - ulige adfærd med ORDER BY?

  3. Programmatisk ækvivalent af import i phpMyAdmin

  4. Når jeg BESTILLER EFTER en beregnet kolonne, bliver forespørgslen markant langsommere - Kan dette fremskyndes?