PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Apakah Postgres mendukung transaksi bersarang atau otonom?

Postgres memang mendukung transaksi bersarang, tetapi berbeda dari SQL konvensional, lebih seperti transaksi dengan titik parsial bersarang.

Di tingkat atas, Anda selalu memiliki BEGIN/COMMIT/ROLLBACK khas Anda , dan pada level bertingkat Anda harus menggunakan perintah berikut:

  • SAVEPOINT name - membuat savepoint baru, dengan nama unik untuk transaksi
  • RELEASE SAVEPOINT name - melakukan savepoint, meskipun itu hanya akan bertahan jika transaksi yang mengandung melakukan
  • ROLLBACK TO SAVEPOINT name - mengembalikan savepoint

Anda juga harus memastikan bahwa:

  • Nama yang digunakan untuk setiap SAVEPOINT unik;
  • Kegagalan dalam satu SAVEPOINT disebarkan ke atas ke tingkat atas.

Bagian terakhir agak rumit, kecuali jika Anda menggunakan perpustakaan yang dapat melakukannya untuk Anda secara otomatis.

Ketika saya menulis pg-promise, saya memastikan bahwa kedua ketentuan itu dijamin:

  • Ini menghasilkan nama save-point secara otomatis, sebagai level_1 , level_2 , dan seterusnya, berdasarkan tingkat transaksi;
  • Dieksekusi berisi ROLLBACK TO SAVEPOINT name , ditambah ROLLBACK tingkat atas jika transaksi anak gagal - semuanya dibangun di atas logika standar rantai janji.

Lihat juga batasan transaksi bersarang PostgreSQL yang dijelaskan...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengubah bidang Enum menggunakan Alembic

  2. Bagaimana cara memperbaiki kesalahan ketidakcocokan versi pg_dump?

  3. Pemantauan PostgreSQL Penting - Bagian 2

  4. Bagaimana cara menggunakan nama kolom dinamis dalam pernyataan UPDATE atau SELECT dalam suatu fungsi?

  5. Pencocokan algoritma dalam SQL