বিধি প্রয়োগ হওয়ার পরে আমি কীভাবে একটি ক্যোয়ারী দেখতে পারি?


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

পুনর্লিখিত ক্যোয়ারির কোনও এসকিউএল উপস্থাপনা দেখার সরাসরি কোনও উপায় নেই, কারণ অভ্যন্তরীণ বৃক্ষের উপস্থাপনায় পুনরায় লেখাটি ঘটে এবং এটিকে এসকিউএলে রূপান্তর করা সহজ নয়। সবচেয়ে কাছের জিনিসটি কনফিগারেশন প্যারামিটারটি চালু করছে debug_print_rewrittenযা সার্ভার লগের জন্য internal অভ্যন্তরীণ বৃক্ষ বিন্যাসের উপস্থাপনা মুদ্রণ করে। আপনি যদি সেটিংস debug_print_parseএবং debug_print_plan(এবং সম্ভবত debug_pretty_print) এর সাথে একত্রে ব্যবহার করেন , আপনি দেখতে পারেন যে কীভাবে বিভিন্ন পর্যায়ে রূপান্তরিত হয়। ফর্ম্যাটটি পড়া সহজ নয় তবে আপনি যদি এর বিশদটি জানতে আগ্রহী হন তবে এটি সম্ভবত মূল্যবান হবে।


আমি আরও শিখেছি যে এক্সপ্ল্লেইন জড়িত প্রশ্নের সংখ্যা এবং ধরণের তথ্য দেয় (এবং এটি ডেটাবেসের ডিবাগ লগের চেয়ে অনেক বেশি পঠনযোগ্য :)।
hegemon
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.