क्या पोस्टग्रेज में अन्य सत्रों के अस्थायी टेबल तक पहुंचने का एक तरीका है?


17

मैं एक Windows एप्लिकेशन के साथ काम कर रहा हूं जो एक (स्थानीय) डेटाबेस का उपयोग करता है और कुछ जानकारी को एक अस्थायी तालिका में संग्रहीत करता है। मैं अस्थायी तालिका पर एक नज़र डालना चाहता हूं, लेकिन pgadmin और dbVis मुझे बताएं: ERROR: cannot access temporary tables of other sessionsजब डेटा को क्वेरी करने की कोशिश कर रहा हो। मैंने स्कीमा और तालिका की अनुमतियों को बदलने की कोशिश की, लेकिन यह मदद नहीं करता था, भले ही मैं डेटाबेस को उसी उपयोगकर्ता के साथ प्रोग्राम के रूप में एक्सेस कर रहा हूं (कम से कम dbVis में)। क्या ऐसी कोई सेटिंग है जिसे मैं अपने डेटाबेस में बदल सकता हूं जो मुझे अपने डेटाबेस में सभी सत्रों के लिए "रूट" एक्सेस करने की अनुमति देता है?

जवाबों:


14

अन्य सत्रों में अस्थायी तालिकाओं तक पहुंच की कमी अनुमतियों का विषय नहीं है, यह डिजाइन की एक तकनीकी सीमा है। एक PostgreSQL बैकएंड किसी अन्य बैकेंड की अस्थायी तालिकाओं तक नहीं पहुंच सकता है क्योंकि समवर्ती अभिगम की अनुमति देने के लिए सामान्य हाउसकीपिंग में से कोई भी अस्थायी तालिकाओं के लिए नहीं किया जाता है।

9.2 में आप UNLOGGEDइसके बजाय एक तालिका का उपयोग करना चाहेंगे ; यह अन्य सत्रों से दिखाई दे सकता है, लेकिन अस्थायी तालिका के अधिकांश प्रदर्शन लाभों को बरकरार रखता है।


11

संक्षिप्त जवाब नहीं है"। अन्य सत्रों में अस्थायी तालिकाएँ डिज़ाइन द्वारा अदृश्य होती हैं। इससे कोई फर्क नहीं पड़ता कि दो सत्रों में एक ही उपयोगकर्ता है। यहाँ तक की:

ऑटोवैक्मूम डेमन पहुंच नहीं सकता है और इसलिए अस्थायी तालिकाओं का वैक्यूम या विश्लेषण नहीं कर सकता है


जब अस्थायी तालिकाओं को गिरा दिया जाता है, तो क्या उन्हें किसी स्मृति या डिस्क संसाधनों को खाली करने के लिए वैक्यूम की आवश्यकता होती है? मैं इस समस्या को हल करने की कोशिश कर रहा हूं और यह सुनिश्चित नहीं कर पा रहा हूं कि क्या यह तथ्य कि ऑटोवैक्यूम को अस्थायी तालिकाओं में नहीं देखा जा सकता है, स्मृति रिसाव का कारण है। क्या मुझे मैन्युअल रूप से वैक्यूम करने की आवश्यकता है?
poshest

"जब अस्थायी तालिकाओं को गिरा दिया जाता है, तो क्या उन्हें एक वैक्यूम की आवश्यकता होती है" नहीं, यहां देखें । किसी भी तालिकाओं के लिए समान है, न कि केवल अस्थायी तालिकाओं के लिए।
जैक डगलस

3

मुझे नहीं पता कि यह आपकी मदद कर सकता है, लेकिन आप कोशिश कर सकते हैं।

सिस्टम कैटलॉग तालिका क्वेरी के बाद डेटाबेस में अन्य सत्रों में बनाई गई सभी अस्थायी तालिकाओं को सूचीबद्ध करने में सक्षम होना चाहिए:

pn.nspname, pc.relname से pg_class pc, pg_namespace pn जहाँ pc.relnamespace = pn.oid और pc.relname ilike 'your_temp_for_name' का चयन करें;

PostgreSQL डॉक के अनुसार , Temporary tables exist in a special schemaऔर आमतौर पर नाम के साथ बनाया जाता है pg_temp_xxx। तो, का उपयोग कर schemanamerelationnameक्वेरी के ऊपर से, आपको अपनी अस्थायी तालिका को क्वेरी करने में सक्षम होना चाहिए। जैसा कि आप यहां देख सकते हैं, अस्थायी तालिका को स्कीमा-योग्य नाम से संदर्भित किया गया है।

उदाहरण: select * from pg_temp_20.your_temp_table_name


1
पारितोषिक के लिए धन्यवाद। मैं dbvis (जो संभवतः आपके द्वारा बताई गई पहली क्वेरी का उपयोग करता है) का उपयोग करके अस्थायी तालिका के लिए नाम और स्कीमा का पता लगाने में सक्षम था, लेकिन समस्या यह थी कि मैं उन्हें बनाए गए सत्र के अलावा किसी सत्र से उन तक नहीं पहुंच सका।
newenglander
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.