首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在应用规则之后,如何查看查询?

在应用规则之后,如何查看查询?
EN

Database Administration用户
提问于 2011-11-17 07:49:39
回答 1查看 130关注 0票数 9

来自文档 - 37.3.1.1。“第一条规则一步一步”

代码语言:javascript
复制
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
                                );

现在有人做了:

代码语言:javascript
复制
(1) UPDATE shoelace_data SET sl_avail = 6 WHERE sl_name = 'sl7';

解析器生成这个额外的查询。

代码语言:javascript
复制
(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)的?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2011-11-17 13:39:24

无法直接看到重写查询的SQL表示形式,因为重写发生在内部树表示上,要将其转换回SQL并不容易。最近的事情是打开配置参数debug_print_rewritten,它将内部树格式的表示打印到服务器日志。如果将此与设置debug_print_parsedebug_print_plan (可能还有debug_pretty_print)结合使用,则可以看到查询是如何在各个阶段进行转换的。格式不容易阅读,但如果您有兴趣了解这方面的细节,它可能是值得的。

票数 5
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/8013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档