PGSQL规则系统

规则系统又叫查询重写规则系统,位于查询分析器和优化器之间.
输入:分析器的输出(是一个querytree)+ pg_rewrite 表里的重写规则(也是一个querytree)
输出:若干个querytree
作用:修改查询以后再传递给优化器。可以用在Procedure、View和版本中。

Querytree(查询树)是什么

它是一个 SQL 语句的内部表现形式,这时组成该SQL语句的每个部分都是分别存储的.
这里说的各个部分包括:
1.命令类型 ( commandtype )
SELECT,INSERT,UPDATE,DELETE.
2.可排列元素 (rangetable)
FROM子句
3.结果关系(resultrelation)
更改影响的表(只有INSERT,UPDATE和DELETE有)
4.条件 (qualification)
WHERE 子句
5.连接树
JOIN表的条件和顺序
6.其他
如ORDER BY 等

视图是由规则系统实现的

PG中创建一个视图:

create view v_t1 as select * from t1;

在内部,这句话实际上是这样操作的:

/*创建一张与t1结构相同的表*/
CREATE TABLE v_t1(id int,name varchar(30)); 
/*创建一个视图规则(注意必须命名为"_RETURN"),该规则把查询重定向到t1表,执行这步操作后v_t1就变成了一个视图*/
CREATE RULE "_RETURN" AS ON SELECT TO v_t1 DO INSTEAD为)
    SELECT * FROM t1;

因此可以看出,实际上视图和表对优化器来说没有任何区别。
创建视图以后,可以发现表pg_rewrite中增加了一条数据。

发布了27 篇原创文章 · 获赞 0 · 访问量 508
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览