पोस्टग्रैज में, वर्तमान परिभाषित बचत बिंदु की सूची कैसे प्राप्त करें?


13

मैं SAVEPOINT पोस्टग्रेट्स का उपयोग कर रहा हूं, जो वर्तमान लेनदेन के भीतर एक नया बचत बिंदु बनाते हैं, और एक कनेक्शन में वर्तमान में परिभाषित बचत बिंदु की सूची प्रदर्शित करना चाहते हैं।

अधिक सटीक होने के लिए: मैं यह जांचना चाहूंगा कि कौन सा नाम कनेक्शन में "कोई ऐसी बचत नहीं" त्रुटि को ट्रिगर करेगा।

जवाबों:


8

दिलचस्प सवाल! संक्षिप्त उत्तर: नहीं

लंबा उत्तर: परिभाषित किए गए बचत बिंदुओं की सूची प्राप्त करने का कोई मौजूदा तरीका प्रतीत नहीं होता है। इससे भी बदतर, एक PostgreSQL एक्सटेंशन बनाना संभव नहीं लगता है जो आपको ऐसा करने देगा: src / backend / access / transam / xact.c को देखते हुए , आप देख सकते हैं कि RollbackToSavepoint (जैसे कि जहां "" savepoint "त्रुटि संदेश जिसका आपने उल्लेख किया है) चर पर भरोसा करें CurrentTransactionState, जिसे xact.c को स्थिर घोषित किया गया है, अर्थात विश्व स्तर पर विस्तार कोड में दिखाई नहीं देगा।

अब, यदि आप सर्वर-साइड से परिभाषित सेवपॉइंट की सूची बनाने के लिए साहसी और काफी हताश थे (जैसा कि आपके ग्राहक को याद है ...) के विपरीत, आप xact.c में एक सहायक फ़ंक्शन में जोड़ सकते हैं जो इसे प्रदर्शित करेगा आपके लिए जानकारी। वास्तव में, यहाँ सिर्फ इस तरह के एक पैच है । यह केवल दृष्टांत उद्देश्यों के लिए एक बहुत ही कठिन पैच है, और सिर्फ सेवपॉइंट नामों को इंगित करता है, यह वास्तव में सेटऑफ टेक्स्ट के रूप में उन नामों को वापस करना चाहिए।

जैसा कि यह सुविधा याद आ रही है, मुझे लगता है कि सर्वर से परिभाषित बचतकर्ताओं की सूची लाने के लिए आवश्यक ग्राहक के लिए बस कोई उपयोग करने योग्य मामला नहीं है। ग्राहक इस सूची के साथ क्या करेगा - बस एक यादृच्छिक और ROLLBACKइसे चुनें? ROLLBACKपिछले एक आँख बंद करके? AFAICT सेवप्वाइंट्स केवल तभी उपयोगी होते हैं जब कोई क्लाइंट यह याद रखे कि उसने क्या सेविंग पॉइंट्स परिभाषित किए हैं और वे कहां उपयोग करने में सक्षम होने के लिए थे।


इस उत्तर के लिए धन्यवाद। क्लाइंट को निश्चित रूप से याद रखना चाहिए, लेकिन एक कनेक्शन के लिए जटिल बहु-थ्रेडेड एक्सेस के मामले में, यह क्लाइंट कोड को डीबग करने में मददगार होगा! और संभवत: अधिक जानकारी कम IMHO की तुलना में अक्सर सुलभ होती है।
वाब

हां, रनिंग कोड के लिए इसका कोई मतलब नहीं है। लेकिन डिबगिंग के लिए यह देखना मददगार होगा कि कौन से सेवप्वाइंट खुले हैं। आपके उत्तर के लिए धन्यवाद।
गुएतली
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.