หากธุรกรรม PostgreSQL ระดับ Serializable ที่ไม่ใช่ READ ONLY DEFERRABLE อ่านข้อมูลแล้วภายหลัง abort แอปพลิเคชันควรทำอย่างไร
กนำผลเดิมไปใช้ต่อ เพราะข้อมูลถูกอ่านก่อนธุรกรรมพบข้อผิดพลาด
ขละทิ้งผลนั้น แล้วลองทำธุรกรรมทั้งรายการใหม่จนกว่าจะสำเร็จ
คบันทึกผลเดิมไว้นอกธุรกรรม แล้วถือว่าเป็นข้อมูลที่ยืนยันแล้ว
งลดระดับเป็น Read Committed แล้วใช้ผลจากธุรกรรมเดิมต่อ
เฉลยอธิบาย
ในธุรกรรม Serializable ผลที่อ่านจากตารางผู้ใช้ถาวรจะถือว่าใช้ได้เมื่อธุรกรรม commit สำเร็จเท่านั้น หากภายหลัง abort แอปต้องละทิ้งผลและทำธุรกรรมทั้งรายการใหม่จนสำเร็จ ข้อ A จึงผิด เพราะการอ่านได้ก่อนเกิดข้อผิดพลาดไม่ได้ยืนยันความถูกต้องของผลนั้น โดยโจทย์ตัดข้อยกเว้น READ ONLY DEFERRABLE แล้ว