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

postgres dødvande uden eksplicit låsning

Du behøver ikke nogen eksplicit LOCK at gå i dødvande. Her er en meget simpel demo fra bunden med kun INDSÆTNINGER:

create table a(i int primary key);
create table b(i int primary key);

Session #1 gør:

begin;
insert into a values(1);

Så gør session #2:

begin;
insert into b values(1);
insert into a values(1);
-- here it goes into waiting for session #1 to finish its transaction

Så gør session #1:

insert into b values(1);

Og så opstår dødvandet:

Det samme kunne ske med simple OPDATERINGER eller en kombination af OPDATERINGER og INDSÆTNINGER. Disse operationer tager implicitte låse, og hvis de sker i forskellige sessioner i forskellige rækkefølger, kan de gå i stå.



  1. ORA-29902:fejl ved udførelse af ODCIIndexStart()-rutinen ORA-20000:Oracle-tekstfejl:DRG-50901:tekstforespørgselsparser-syntaksfejl på linje 1, kolonne 19

  2. Hvordan håndterer jeg anførselstegn ' i SQL

  3. Eksporter tabel fra database til csv-fil

  4. Konvertering mellem SQL char og C#