sql >> Database >  >> RDS >> PostgreSQL

postgres-impasse zonder expliciete vergrendeling

Je hebt geen expliciete LOCK nodig in een impasse te raken. Hier is een heel eenvoudige demo van de grond af met alleen INSERT's:

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

Sessie #1 doet:

begin;
insert into a values(1);

Dan doet sessie #2:

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

Dan doet sessie #1 dat wel:

insert into b values(1);

En dan komt de impasse:

Hetzelfde kan gebeuren met eenvoudige UPDATE's of een combinatie van UPDATE's en INSERT's. Voor deze bewerkingen zijn impliciete vergrendelingen nodig en als ze in verschillende sessies in verschillende volgorde plaatsvinden, kunnen ze vastlopen.



  1. Wat is een Bitmap-heapscan in een queryplan?

  2. Postgresql:Ongeldige reguliere expressie:ongeldig backreferentienummer

  3. str_replace in SQL-UPDATE?

  4. Apache Dbutils verandert kolomnaam in update Sql