您的位置:首页 > 数据库

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

2012-04-11 09:23 405 查看
有两张表 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_list

after insert or update or delete ON user

for each row execute procedure make_diff_user_list();




注意:

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

如果报错

language "plpgsql" dose not exist

执行如下语句

create language plpgsql
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: