sql >> Databasteknik >  >> RDS >> PostgreSQL

Stöder Postgres kapslade eller autonoma transaktioner?

Postgres stöder kapslade transaktioner, men de skiljer sig från konventionell SQL, mer som transaktioner med kapslade delpunkter.

På den översta nivån har du alltid din typiska BEGIN/COMMIT/ROLLBACK , och på kapslade nivåer måste du använda följande kommandon:

  • SAVEPOINT name - skapar en ny räddningspunkt, med namn unikt för transaktionen
  • RELEASE SAVEPOINT name - commits räddningspunkten, även om den bara kvarstår om den innehållande transaktionen commits
  • ROLLBACK TO SAVEPOINT name - rullar tillbaka räddningspunkten

Du måste också se till att:

  • Namnen som används för varje SAVEPOINT är unika;
  • Fel i en SAVEPOINT sprids uppåt till den översta nivån.

Den sista biten är lite knepig, om du inte använder ett bibliotek som kan göra det åt dig automatiskt.

När jag skrev pg-promise såg jag till att dessa två bestämmelser är garanterade:

  • Den genererar räddningspunktsnamn automatiskt, som level_1 , level_2 , och så vidare, baserat på transaktionsnivån;
  • Den körs som innehåller ROLLBACK TO SAVEPOINT name , plus toppnivån ROLLBACK om en underordnad transaktion misslyckas - allt byggt på standardlogiken för löfteskedja.

Se även begränsningarna för PostgreSQL kapslade transaktioner förklarade...



  1. Använda MySQL Galera Cluster Replication för att skapa ett geodistribuerat kluster:Del två

  2. Vad är användningen av hakparenteser [] i sql-satser?

  3. Vad är motsvarigheten till Oracle Dual-tabellen i MS SqlServer?

  4. Giltiga modifierare för SQLites datum/tid-funktioner