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

Podporuje Postgres vnořené nebo autonomní transakce?

Postgres podporuje vnořené transakce, ale liší se od konvenčních SQL, spíše jako transakce s vnořenými dílčími body.

Na nejvyšší úrovni máte vždy svůj typický BEGIN/COMMIT/ROLLBACK a na vnořených úrovních musíte použít následující příkazy:

  • SAVEPOINT name - vytvoří nový bod uložení s jedinečným názvem pro transakci
  • RELEASE SAVEPOINT name - potvrdí uložený bod, i když bude přetrvávat pouze v případě, že se transakce obsahující
  • ROLLBACK TO SAVEPOINT name - vrátí zpět bod uložení

Také byste se museli ujistit, že:

  • Názvy používané pro každý SAVEPOINT jsou jedinečné;
  • Selhání v jednom SAVEPOINT se šíří nahoru do nejvyšší úrovně.

Poslední část je trochu složitější, pokud nepoužíváte knihovnu, která to za vás dokáže automaticky.

Když jsem psal pg-promise, ujistil jsem se, že tato dvě ustanovení jsou zaručena:

  • Názvy bodů uložení generuje automaticky, jako level_1 , level_2 , a tak dále, na základě úrovně transakce;
  • Provádí se obsahující ROLLBACK TO SAVEPOINT name , plus ROLLBACK nejvyšší úrovně pro případ, že podřízená transakce selže – vše je postaveno na standardní logice řetězení slibů.

Podívejte se také na vysvětlená omezení vnořených transakcí PostgreSQL...



  1. Jak ukládat obrázky do databáze MySQL

  2. Jak Asinh() funguje v PostgreSQL

  3. Při hledání rychlého místního úložiště

  4. Určení OID tabulky v Postgres 9.1?