PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Czy Postgres obsługuje transakcje zagnieżdżone lub autonomiczne?

Postgres obsługuje zagnieżdżone transakcje, ale różnią się one od konwencjonalnego SQL, bardziej jak transakcje z zagnieżdżonymi punktami częściowymi.

Na najwyższym poziomie zawsze masz swój typowy BEGIN/COMMIT/ROLLBACK , a na poziomach zagnieżdżonych musisz użyć następujących poleceń:

  • SAVEPOINT name - tworzy nowy punkt zapisu o nazwie unikalnej dla transakcji
  • RELEASE SAVEPOINT name - zatwierdza punkt zapisu, choć będzie on trwał tylko wtedy, gdy transakcja zawierająca zostanie zatwierdzona
  • ROLLBACK TO SAVEPOINT name - cofa punkt zapisu

Musisz również upewnić się, że:

  • Nazwy używane dla każdego SAVEPOINT są unikalne;
  • Awaria w jednym SAVEPOINT jest propagowany w górę do najwyższego poziomu.

Ostatni fragment jest trochę trudny, chyba że używasz biblioteki, która może to zrobić automatycznie.

Kiedy pisałem pg-promise, upewniłem się, że te dwa warunki są gwarantowane:

  • Automatycznie generuje nazwy punktów zapisu, jako level_1 , level_2 , i tak dalej, w zależności od poziomu transakcji;
  • Wykonuje się zawierający ROLLBACK TO SAVEPOINT name , plus najwyższego poziomu ROLLBACK w przypadku niepowodzenia transakcji podrzędnej - wszystko oparte na standardowej logice tworzenia łańcucha obietnic.

Zobacz także wyjaśnione ograniczenia transakcji zagnieżdżonych PostgreSQL...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nie można WSTAWIĆ:BŁĄD:wartość tablicy musi zaczynać się od { lub informacji o wymiarze

  2. pg_restore Alternatywy - Kopia zapasowa PostgreSQL i automatyczne odzyskiwanie za pomocą ClusterControl

  3. Jak korzystać z LoggingConnection firmy Psycopg2?

  4. Dziesięć wskazówek, jak przejść do produkcji z PostgreSQL

  5. Spark Dataframes UPSERT do Postgres Table