规则系统又叫查询重写规则系统,位于查询分析器和优化器之间.
输入:分析器的输出(是一个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 a