规则可以用于实现视图的更新、插入和删除操作,也可以用于复杂的查询改写。创建规则的基本语法如下:
CREATE或REPLACE RULE 规则名 AS ON 事件
TO 表名/视图名 WHERE 条件
DO ALSO或INSTEAD 新操作命令
其中,CREATE
或REPLACE
表示创建或者修改规则,事件包括:SELECT
、INSERT
、UPDATE
、DELETE
,DO [ ALSO | INSTEAD ]
指定规则的行为。ALSO
表示除了执行原操作外,还执行新操作命令;INSTEAD
表示用新操作命令替换原操作命令。例如,创建一个视图 v_stu
,并定义一个 SELECT 规则:
CREATE VIEW v_stu AS SELECT * FROM student;
CREATE RULE "RETURN" AS ON SELECT TO v_stu
DO INSTEAD SELECT * FROM student;
QGIS文档中提供了一个创建日志规则的案例:将 people 表中 phone_no 的每次更改记录到 people_log 表。
# 创建people_log
create table people_log (name text, time timestamp default NOW());
# 创建一个规则,用于更新 people_log 表
create rule people_log as on update to people
where NEW.phone_no <> OLD.phone_no
do insert into people_log values (OLD.name);
# 修改测试
update people set phone_no = '082 555 1234' where id = 2;
# 检查people是否更新
select * from people where id=2;
# 查看规则表
select * from people_log;
# 规则表内容
name | time
------------+----------------------------
Joe Bloggs | 2014-01-11 14:15:11.953141