PostgreSQL không hỗ trợ các giao dịch phụ, nhưng SAVEPOINT
tính năng này có thể đáp ứng hiệu quả nhu cầu của bạn. Trích dẫn từ tài liệu về lớp truy cập Nâng cao cho PG thông qua lời hứa của Vitaly Tomilov trên GitHub:
PostgreSQL không có hỗ trợ phù hợp cho các giao dịch lồng nhau, nó chỉ hỗ trợ khôi phục một phần thông qua các điểm lưu trữ bên trong các giao dịch. Sự khác biệt giữa hai kỹ thuật là rất lớn, như được giải thích thêm.
Hỗ trợ đúng đắn cho các giao dịch lồng nhau có nghĩa là kết quả của một giao dịch phụ thành công sẽ không được khôi phục khi giao dịch mẹ của nó được khôi phục. Nhưng với các điểm lưu PostgreSQL, nếu bạn quay lại giao dịch cấp cao nhất, kết quả của tất cả các điểm lưu bên trong cũng được khôi phục.
Điểm lưu trữ có thể được sử dụng cho các lần khôi phục một phần đến điểm trước đó trong một giao dịch đang hoạt động. Ví dụ: để thiết lập một điểm lưu trữ và sau đó hoàn tác các hiệu ứng của tất cả các lệnh được thực hiện sau khi nó được thiết lập:
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;
Giao dịch trên sẽ chèn các giá trị 1 và 3, nhưng không phải 2. Xem SAVEPOINT
tài liệu để biết thêm thông tin.