Làm thế nào tôi có thể thấy một truy vấn sau khi các quy tắc đã được áp dụng?


9

Từ tài liệu - 37.3.1.1. "Một quy tắc đầu tiên từng bước"

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

Bây giờ ai đó làm:

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

Và trình phân tích cú pháp tạo ra truy vấn bổ sung này

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

Câu hỏi là: Có công cụ nào để cho biết cách truy vấn (1) được viết lại thành (1) + (2) không?

Câu trả lời:


5

Không có cách nào trực tiếp để xem biểu diễn SQL của truy vấn được viết lại, bởi vì việc viết lại xảy ra trên một biểu diễn cây bên trong và không dễ để biến điều này trở lại thành SQL. Điều gần nhất là bật tham số cấu hình debug_print_rewritten, trong đó in một đại diện của định dạng cây nội bộ đó vào nhật ký máy chủ. Nếu bạn sử dụng kết hợp với các cài đặt debug_print_parsedebug_print_plan(và có thể debug_pretty_print), bạn có thể xem cách truy vấn được chuyển đổi qua các giai đoạn khác nhau. Định dạng không dễ đọc, nhưng nếu bạn muốn tìm hiểu chi tiết về điều này, nó có thể sẽ có giá trị.


Tôi cũng đã học được rằng EXPLAIN cung cấp thông tin về số lượng và loại truy vấn có liên quan (và dễ đọc hơn nhiều so với nhật ký gỡ lỗi của cơ sở dữ liệu :).
bá chủ
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.