|
2.4. PostgreSQL 规则系统PostgreSQL 有一个强大的 规则系统 ,用以阐述 视图 和不明确的 视图更新 。 最初的 PostgreSQL 规则系统由两个实现组成:
要获取关于 PostgreSQL 系统里规则的创建和语法的信息,请参考 PostgreSQL 用户手册 。 2.4.1. 重写系统重写系统 是一个位于分析器阶段和规划器/优化器之间的模块。 它处理分析器阶段传回的分析树(该分析树代表用户查询), 如果存在一条必须应用的规则的话, 这个模块把分析树重写成一个变化过的形式。 2.4.1.1. 实现视图的技巧现在我们勾画一下查询重写系统的算法。 为了更好的说明问题,我们把用规则系统实现视图作为一个例子。 先给出下面规则: create rule view_rule as on select to test_view do instead select s.sname, p.pname from supplier s, sells se, part p where s.sno = se.sno and p.pno = se.pno;
当检测到对关系 test_view 的 select 时,就会 触发 上面给出的规则。 这时这句选择语句将执行规则里的动作部分, 而不是从 test_view 里选择元组。 给出下面的对 test_view 的用户查询: select sname from test_view where sname <> 'Smith';
这里是当一个用户查询作用于 test_view 时, 查询重写系统执行的一系列步骤。(下面的列表只是一个非常不正 式的关于查询重写的算法的描述,只是用于了解基础。 更多的详细描述请参考 POSTGRES 规则系统的注解 )。 test_view 重写
给出上面定义的规则后,用户查询将被重写为下面的形式 (请注意:重写动作是对从分析器阶段传回的用户查询的内部形式操作的, 不过所产生的新的数据结构将代表下面的查询): select s.sname from supplier s, sells se, part p where s.sno = se.sno and p.pno = se.pno and s.sname <> 'Smith';
|