PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Postgres поддържа ли вложени или автономни транзакции?

Postgres поддържа вложени транзакции, но те се различават от конвенционалния SQL, по-скоро като транзакции с вложени частични точки.

На най-горното ниво винаги имате своя типичен BEGIN/COMMIT/ROLLBACK , а на вложени нива трябва да използвате следните команди:

  • SAVEPOINT name - създава нова точка за запис, с име, уникално за транзакцията
  • RELEASE SAVEPOINT name - записва точката на запис, въпреки че тя ще продължи само ако съдържащата я транзакция се задължи
  • ROLLBACK TO SAVEPOINT name - връща назад точката за запис

Трябва също така да се уверите, че:

  • Имената, използвани за всяка SAVEPOINT са уникални;
  • Неуспех в една SAVEPOINT се разпространява нагоре до най-горното ниво.

Последният бит е малко труден, освен ако не използвате библиотека, която може да направи това автоматично вместо вас.

Когато написах pg-promise, се уверих, че тези две разпоредби са гарантирани:

  • Той генерира имена на точки за запис автоматично, като level_1 , level_2 и така нататък въз основа на нивото на транзакцията;
  • Изпълнява се, съдържащо ROLLBACK TO SAVEPOINT name , плюс ROLLBACK от най-високо ниво в случай, че дъщерната транзакция се провали – всичко е изградено на базата на стандартната логика за верижно обещание.

Вижте също обяснените ограничения на вложените транзакции на 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. Сравняване на хранилища за данни за PostgreSQL - MVCC срещу InnoDB

  2. Размер на таблицата на дяловете в PostgreSQL 9.0

  3. Премахване на дубликат от таблица

  4. Време за изчакване на заявка в pg-promise

  5. В psql защо някои команди нямат ефект?