ฉันจะดูข้อความค้นหาหลังจากใช้กฎได้อย่างไร


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';

และ parser สร้างแบบสอบถามเพิ่มเติมนี้

(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 ของแบบสอบถามที่เขียนใหม่เนื่องจากการเขียนใหม่เกิดขึ้นในการแสดงทรีภายในและไม่ใช่เรื่องง่ายที่จะเปลี่ยนกลับเป็น SQL สิ่งที่ใกล้เคียงที่สุดคือการเปิดพารามิเตอร์การกำหนดค่าdebug_print_rewrittenซึ่งพิมพ์การแสดงรูปแบบแผนผังภายในนั้นไปยังบันทึกเซิร์ฟเวอร์ หากคุณใช้สิ่งนี้ร่วมกับการตั้งค่าdebug_print_parseและdebug_print_plan(และอาจเป็นไปได้debug_pretty_print) คุณสามารถดูว่าการแปลงแบบสอบถามผ่านขั้นตอนต่าง ๆ ได้อย่างไร รูปแบบไม่ใช่เรื่องง่ายที่จะอ่าน แต่ถ้าคุณสนใจที่จะเรียนรู้รายละเอียดสิ่งนี้มันอาจจะคุ้มค่า


ฉันยังได้เรียนรู้ว่าอธิบายให้ข้อมูลเกี่ยวกับจำนวนและประเภทของการสืบค้นที่เกี่ยวข้อง (และสามารถอ่านได้มากกว่าบันทึกการดีบักของฐานข้อมูล :)
hegemon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.