postgre SQL 中的 触发器 (实例应用,如何备份更新之前的差分数据)

来源:互联网 发布:java遍历map集合 编辑:程序博客网 时间:2024/04/24 05:51

有两张表 user  和  diff_user_list

 

当对user表进行增删改查,或其中某个字段发生变化时,相应的对diff_user_list表中插入字段。

 

下面的代码的作用是,当user表中的字段"姓名"更新时,把旧的记录存入 diff_user_list  表中

 

依此类推,还可以写出 插入数据 删除数据时的,备份之前数据的代码。

 

create or replace function make_diff_user_list()        returns trigger as$body$         declare                curtime timestamp;        begin                curtime := `now`;                 IF(TG_OP  = 'UPDARE' ) THEN                            IF (OLD.user_name != NEW.user_name ) THEN                                   INSERT INTO diff_user_list (user_id, user_name, update_time, operate_flg)                                         VALUES ( OLD.user_id, OLD.user_name, curtime, `1` );                                   RETURN NULL;                            END IF;                END IF;                 RETURN NULL;                 EXCEPTION                    WHEN OTHERS THEN                           RETURN NULL;        end;$body$   language 'plpgsql' volatile    cost 100;

 

 

说明

上面这段代码是一个存储过程 (procedure)

 

其中有$body$   这里面可以不是body,可以是别的东西,比如  diff_user_list

 

下面这段代码是建立触发器,并与上面的存储过程相关联

create trigger diff_user_listafter insert or update or delete ON userfor each row execute procedure make_diff_user_list();


 

注意:

===============================================

如果报错

language "plpgsql" dose not exist

执行如下语句

create language plpgsql

 

原创粉丝点击