PostgreSQL ไม่รองรับการทำธุรกรรมย่อย แต่SAVEPOINT
คุณสมบัติสามารถตอบสนองความต้องการของคุณได้อย่างมีประสิทธิภาพ การอ้างอิงจากเอกสารสำหรับAdvanced access layer ถึง PG ผ่านสัญญาโดยVitaly Tomilovบน GitHub:
PostgreSQL ไม่ได้มีการสนับสนุนที่เหมาะสมสำหรับการทำธุรกรรมที่ซ้อนกันจะสนับสนุนเฉพาะrollbacks บางส่วนผ่านsavepointsภายในการทำธุรกรรม ความแตกต่างระหว่างสองเทคนิคนี้มีขนาดใหญ่มากดังอธิบายเพิ่มเติม
การสนับสนุนที่เหมาะสมสำหรับธุรกรรมที่ซ้อนกันหมายความว่าผลลัพธ์ของการทำธุรกรรมย่อยที่ประสบความสำเร็จจะไม่ถูกย้อนกลับเมื่อธุรกรรมหลักถูกย้อนกลับ แต่ด้วยจุดบันทึก PostgreSQL ถ้าคุณย้อนกลับธุรกรรมระดับบนสุดผลลัพธ์ของจุดบันทึกภายในทั้งหมดจะถูกย้อนกลับด้วย
Savepoints สามารถใช้สำหรับการย้อนกลับบางส่วนถึงจุดก่อนหน้าภายในธุรกรรมที่ใช้งานอยู่ ตัวอย่างเช่นในการสร้าง savepoint และเลิกทำเอฟเฟกต์ของคำสั่งทั้งหมดที่ดำเนินการหลังจากสร้างแล้ว:
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;
ธุรกรรมข้างต้นจะแทรกค่า 1 และ 3 แต่ไม่ใช่ 2 ดูSAVEPOINT
เอกสารประกอบสำหรับข้อมูลเพิ่มเติม