PostgreSQL的规则系统
本文内容遵从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,这样就实现了更新视图。对于多表的视图,也可以这样操作。