PostgreSQL tidak mendukung sub-transaksi, tetapi SAVEPOINT
fitur ini dapat secara efektif menjawab kebutuhan Anda. Mengutip dari dokumentasi untuk lapisan akses tingkat lanjut ke PG melalui janji-janji oleh Vitaly Tomilov di GitHub:
PostgreSQL tidak memiliki dukungan yang tepat untuk transaksi bersarang, itu hanya mendukung rollback parsial melalui savepoints dalam transaksi. Perbedaan antara kedua teknik ini sangat besar, seperti yang dijelaskan lebih lanjut.
Dukungan yang tepat untuk transaksi bersarang berarti bahwa hasil dari sub-transaksi yang berhasil tidak dibatalkan ketika transaksi induknya dibatalkan. Tetapi dengan PostgreSQL save-points, jika Anda memutar kembali transaksi tingkat atas, hasil dari semua save-points dalam juga dibatalkan.
Savepoints dapat digunakan untuk mengembalikan sebagian ke titik sebelumnya dalam transaksi aktif. Misalnya, untuk membuat savepoint dan kemudian membatalkan efek dari semua perintah yang dieksekusi setelah didirikan:
BEGIN;
INSERT INTO table1 VALUES (1);
SAVEPOINT my_savepoint;
INSERT INTO table1 VALUES (2);
ROLLBACK TO SAVEPOINT my_savepoint;
INSERT INTO table1 VALUES (3);
COMMIT;
Transaksi di atas akan memasukkan nilai 1 dan 3, tetapi tidak 2. Lihat SAVEPOINT
dokumentasi untuk informasi lebih lanjut.