नियम लागू होने के बाद मैं एक क्वेरी कैसे देख सकता हूं?


9

से डॉक्स - 37.3.1.1। "ए फर्स्ट रूल स्टेप बाय स्टेप"

CREATE TABLE shoelace_log (
    sl_name    text,          -- shoelace changed
    sl_avail   integer,       -- new available value
    log_who    text,          -- who did it
    log_when   timestamp      -- when
);

CREATE RULE log_shoelace AS ON UPDATE TO shoelace_data
    WHERE NEW.sl_avail <> OLD.sl_avail
    DO INSERT INTO shoelace_log VALUES (
                                    NEW.sl_name,
                                    NEW.sl_avail,
                                    current_user,
                                    current_timestamp
                                );

अब कोई करता है:

(1) UPDATE shoelace_data SET sl_avail = 6 WHERE sl_name = 'sl7';

और पार्सर इस अतिरिक्त क्वेरी को उत्पन्न करता है

(2) INSERT INTO shoelace_log VALUES (
       shoelace_data.sl_name, 6,
       current_user, current_timestamp )
  FROM shoelace_data
 WHERE 6 <> shoelace_data.sl_avail
   AND shoelace_data.sl_name = 'sl7';

प्रश्न यह है: क्या कोई उपकरण है जो यह बताने के लिए है कि क्वेरी (1) को फिर से कैसे लिखा जाता है (1) + (2)?

जवाबों:


5

पुनर्लेखन क्वेरी के SQL प्रतिनिधित्व को देखने का कोई सीधा तरीका नहीं है, क्योंकि पुनर्लेखन एक आंतरिक ट्री प्रतिनिधित्व पर होता है, और इसे एसक्यूएल में वापस करना आसान नहीं है। निकटतम चीज कॉन्फ़िगरेशन पैरामीटर को चालू कर रही है debug_print_rewritten, जो सर्वर लॉग में उस आंतरिक ट्री प्रारूप के प्रतिनिधित्व को प्रिंट करता है। यदि आप सेटिंग्स debug_print_parseऔर debug_print_plan(और संभवतः debug_pretty_print) के साथ संयोजन में इसका उपयोग करते हैं , तो आप देख सकते हैं कि क्वेरी को विभिन्न चरणों के माध्यम से कैसे बदला जाता है। प्रारूप पढ़ना आसान नहीं है, लेकिन यदि आप इसका विवरण जानने में रुचि रखते हैं, तो शायद यह इसके लायक होगा।


मैंने यह भी सीखा है कि EXPLAIN इसमें शामिल प्रश्नों की संख्या और प्रकार पर जानकारी देता है (और डेटाबेस के डिबग लॉग की तुलना में कहीं अधिक पठनीय है :)।
Hegemon
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.