ฉันใช้ postgres SAVEPOINTซึ่งสร้าง savepoint ใหม่ภายในธุรกรรมปัจจุบันและต้องการแสดงรายการของ savepoint ที่กำหนดไว้ในปัจจุบันในการเชื่อมต่อ
เพื่อให้แม่นยำยิ่งขึ้น: ฉันต้องการตรวจสอบชื่อที่จะไม่เรียกข้อผิดพลาด "no savepoint" ในการเชื่อมต่อ
ฉันใช้ postgres SAVEPOINTซึ่งสร้าง savepoint ใหม่ภายในธุรกรรมปัจจุบันและต้องการแสดงรายการของ savepoint ที่กำหนดไว้ในปัจจุบันในการเชื่อมต่อ
เพื่อให้แม่นยำยิ่งขึ้น: ฉันต้องการตรวจสอบชื่อที่จะไม่เรียกข้อผิดพลาด "no savepoint" ในการเชื่อมต่อ
คำตอบ:
คำถามที่น่าสนใจ! คำตอบสั้น ๆ : ไม่มี
คำตอบยาว: ไม่ปรากฏว่ามีวิธีใดที่มีอยู่ในการรับรายการของจุดบันทึกที่กำหนดไว้ ยิ่งแย่ไปกว่านั้นมันเป็นไปไม่ได้ที่จะสร้างส่วนขยาย PostgreSQL ซึ่งจะช่วยให้คุณทำสิ่งนี้: ดูที่src / แบ็กเอนด์ / เข้าถึง / transam / xact.cคุณสามารถเห็นฟังก์ชั่นเช่น RollbackToSavepoint (ซึ่งเป็นที่ที่ "ไม่เช่นนั้น ข้อผิดพลาด savepoint "คุณกล่าวถึงมาจาก) พึ่งพาตัวแปร CurrentTransactionState ซึ่งประกาศคงที่เพื่อ xact.c คือจะไม่สามารถมองเห็นได้ทั่วโลกเพื่อรหัสส่วนขยาย
ตอนนี้ถ้าคุณกล้าและอยากจะสร้างรายการของจุดบันทึกที่กำหนดไว้จากฝั่งเซิร์ฟเวอร์ (ตรงข้ามกับที่ลูกค้าของคุณจำได้ว่า ... ) คุณสามารถเพิ่มฟังก์ชั่นตัวช่วยลงใน xact.c ที่จะแสดงสิ่งนี้ ข้อมูลสำหรับคุณ ในความเป็นจริงนี่เป็นเพียงเช่นแพทช์ นั่นเป็นแพทช์คร่าวๆเพื่อจุดประสงค์ในการประกอบภาพเท่านั้นและเพียงแค่ elogs ชื่อ savepoint มันควรจะคืนชื่อเหล่านั้นเป็น setof text จริงๆ
ด้วยเหตุที่คุณสมบัตินี้หายไปฉันคาดว่าจะไม่มีกรณีการใช้งานที่เป็นไปได้สำหรับลูกค้าที่ต้องการดึงรายการของจุดบันทึกที่กำหนดจากเซิร์ฟเวอร์ ลูกค้าจะทำอะไรกับรายการนี้ - เพียงแค่เลือกอย่างสุ่มและROLLBACK
มันได้หรือไม่ ROLLBACK
เป็นคนสุดท้ายที่สุ่มสี่สุ่มห้า? AFAICT savepoints จะมีประโยชน์ก็ต่อเมื่อลูกค้าจำได้ว่ามีการกำหนด savepoint ไว้ในจุดใดและอยู่ที่ไหนเพื่อให้สามารถใช้ประโยชน์ได้