sql >> Databáze >  >> RDS >> PostgreSQL

postgres deadlock bez explicitního zamykání

Nepotřebujete žádné explicitní LOCK dostat se do slepé uličky. Zde je velmi jednoduché demo od nuly pouze s INSERTy:

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

Relace #1 dělá:

begin;
insert into a values(1);

Potom relace č. 2 provede:

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

Potom relace č. 1 provede:

insert into b values(1);

A pak dojde k uváznutí:

Totéž se může stát s jednoduchými UPDATEs nebo kombinací UPDATEs a INSERTs. Tyto operace mají implicitní zámky, a pokud k nim dojde v různých relacích v různém pořadí, mohou uváznout.



  1. více hodnot vložení zaškrtávacího políčka pouze poslední hodnota je přijímána v databázi

  2. Jak používat parametry SQL v chunku R markdown SQL

  3. Odesílání HTML kódu přes JSON

  4. MySQL Rollback v transakci