Kurallar uygulandıktan sonra bir sorguyu nasıl görebilirim?


9

Gönderen docs - 37.3.1.1. "Adım Adım İlk Kural"

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

Şimdi birisi yapar:

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

Ayrıştırıcı bu ek sorguyu oluşturur

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

Soru şudur: Sorgu (1) 'in (1) + (2)' ye nasıl yeniden yazıldığını anlatmak için herhangi bir araç var mı?

Yanıtlar:


5

Yeniden yazılan sorgunun SQL temsilini görmenin doğrudan bir yolu yoktur, çünkü yeniden yazma dahili bir ağaç sunumunda gerçekleşir ve bunu tekrar SQL'e dönüştürmek kolay değildir. En yakın şey, debug_print_rewrittenbu dahili ağaç biçiminin bir temsilini sunucu günlüğüne yazdıran yapılandırma parametresini açmaktır. Bunu ayarlar debug_print_parseve debug_print_plan(ve muhtemelen debug_pretty_print) ile birlikte kullanırsanız , sorgunun çeşitli aşamalarda nasıl dönüştürüldüğünü görebilirsiniz. Formatın okunması kolay değildir, ancak bunun ayrıntılarını öğrenmekle ilgileniyorsanız, muhtemelen buna değer olacaktır.


Ayrıca EXPLAIN, ilgili sorguların sayısı ve türü hakkında bilgi verdiğini öğrendim (ve veritabanının hata ayıklama günlüğünden çok daha okunabilir :).
hegemon
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.