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

Understøtter Postgres indlejrede eller autonome transaktioner?

Postgres understøtter indlejrede transaktioner, men de adskiller sig fra den konventionelle SQL, mere som transaktioner med indlejrede delpunkter.

På det øverste niveau har du altid din typiske BEGIN/COMMIT/ROLLBACK , og på indlejrede niveauer skal du bruge følgende kommandoer:

  • SAVEPOINT navn - opretter et nyt lagringspunkt, med navn unikt for transaktionen
  • RELEASE SAVEPOINT navn - begår lagringspunktet, selvom det kun vil fortsætte, hvis den indeholdende transaktion begår
  • RULL TILBAGE TIL SAVEPOINT navn - ruller lagringspunktet tilbage

Du skal også sørge for at:

  • Navnene, der bruges til hver SAVEPOINT er unikke;
  • Fejl i ét SAVEPOINT forplantes opad til det øverste niveau.

Det sidste er lidt vanskeligt, medmindre du bruger et bibliotek, der automatisk kan gøre det for dig.

Da jeg skrev pg-promise, sørgede jeg for, at disse to bestemmelser er garanteret:

  • Den genererer automatisk navne på lagringspunkter som level_1 , niveau_2 , og så videre, baseret på transaktionsniveauet;
  • Den udføres indeholdende ROLLBACK TO SAVEPOINT navn plus ROLLBACK på øverste niveau i tilfælde af at en underordnet transaktion mislykkes - alt sammen bygget på standardlogikken for løftekæder.

Se også begrænsningerne for PostgreSQL indlejrede transaktioner forklaret...



  1. Valg af flere max()-værdier ved hjælp af en enkelt SQL-sætning

  2. Jquery stjernevurdering tutorial ved hjælp af php og mysql

  3. ML{.NET} Introduktion

  4. Oracle vælg til opdateringsadfærd