sql >> Database >  >> RDS >> PostgreSQL

INSERT en transactieserialisatie in PostreSQL

Over het algemeen niet. De tweede transactie is alleen invoegen, dus tenzij er een unieke indexcontrole of andere trigger moet plaatsvinden, kunnen de gegevens onvoorwaardelijk worden ingevoegd. In het geval van een unieke index (inclusief primaire sleutel), wordt deze geblokkeerd als beide transacties rijen bijwerken met dezelfde waarde, bijvoorbeeld:

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

Bij updates die van invloed kunnen zijn op invoegingen door de andere transactie ligt het minder voor de hand. Ik begrijp dat PostgreSQL in dit geval nog geen "echte" serialiseerbaarheid ondersteunt. Ik weet niet hoe vaak dit wordt ondersteund door andere SQL-systemen.

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



  1. Waarom werkt PHP's OCI8/Oracle oci_bind_array_by_name niet voor mij?

  2. afbeelding ophalen van mysql php

  3. MySQL relationele databases gebruiken op Debian 6 (Squeeze)

  4. Het standaard null-sorteergedrag van PostgreSQL in de Django ORM wijzigen