来自文档 - 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)的?
发布于 2011-11-17 13:39:24
无法直接看到重写查询的SQL表示形式,因为重写发生在内部树表示上,要将其转换回SQL并不容易。最近的事情是打开配置参数debug_print_rewritten,它将内部树格式的表示打印到服务器日志。如果将此与设置debug_print_parse和debug_print_plan (可能还有debug_pretty_print)结合使用,则可以看到查询是如何在各个阶段进行转换的。格式不容易阅读,但如果您有兴趣了解这方面的细节,它可能是值得的。
https://dba.stackexchange.com/questions/8013
复制相似问题