PostgreSQL的规则系统

4月 11th, 2010 | Posted by | Filed under 数据库

本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明
网址: http://www.penglixun.com/tech/database/postgresql_rule_system.html

PostgreSQL提供了一种叫做规则(Rule)的机制,来实现一些与触发器不同的更加自定义的功能。规则系统介于查询编译器和执行优化器之间,根据规则及修改查询。

基本语法:

CREATE RULE 规则名 AS
    ON {SELECT | INSERT | UPDATE | DELETE}
    TO 表名 [WHERE 规则条件]
    DO [INSTEAD] {NOTHING | 命令 | (命令, 命令...)}

PostgreSQL中的视图实际上就是通过RULE来实现的。

例如建立一个视图:

CREATE VIEW view_1 AS SELECT * FROM table_1;

PostgreSQL实际将这个语句翻译为规则:

CREATE TABLE table_view_1 (涉及的列名);

CREATE RULE return AS 
    ON SELECT TO table_view_1 DO INSTEAD 
    SELECT * FROM table_1;

这样在查询view_1视图时,PostgreSQL实际上把它转换为对隐含的表table_view_1的查询。

在仅仅需要查询的时候,CREATE VIEW是更合适的语法,但是这这样建立的视图是不能做修改操作的,但是通过规则是可以做到的。

例如我们要更新view_1视图:

CREATE TABLE table_view_1 (涉及的列名);

CREATE RULE update_view_1 AS 
    ON UPDATE TO table_view_1
    DO UPDATE table_1 SET col_1 = new.col_1
       WHERE col_2 = new.col_2;

有了这样的规则,我们执行UPDATE view_1 SET col_1=x WHERE col_2=y;的时候,实际上就更新了table_1,这样就实现了更新视图。对于多表的视图,也可以这样操作。

目前还没有任何评论.