postgre SQL 中的 触发器 (实例应用,如何备份更新之前的差分数据)
2012-04-11 09:23
405 查看
有两张表 user 和 diff_user_list
当对user表进行增删改查,或其中某个字段发生变化时,相应的对diff_user_list表中插入字段。
下面的代码的作用是,当user表中的字段"姓名"更新时,把旧的记录存入 diff_user_list 表中
依此类推,还可以写出 插入数据 删除数据时的,备份之前数据的代码。
说明
上面这段代码是一个存储过程 (procedure)
其中有$body$ 这里面可以不是body,可以是别的东西,比如 diff_user_list
下面这段代码是建立触发器,并与上面的存储过程相关联
注意:
===============================================
如果报错
language "plpgsql" dose not exist
执行如下语句
create language plpgsql
当对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
相关文章推荐
- sql 中如何将A表的数据更新到B表中,数据表备份语句
- oracle 如何用触发器实现更新刚插入的数据
- oracle 如何用触发器实现更新刚插入的数据集合
- 如何测试备份软件在关键应用上不丢失数据
- 如何备份iPhone数据之前升级到iOS 7
- delphi中如何在控件刷新之前禁止重画,更新了数据后再刷新?
- 网站如何数据备份
- 触发器在业务数据处理中的应用
- 如何把一个Qt应用打包为一个snap应用--snapcraft scriptlets应用实例
- 与服务器同步数据时,如何做到只更新被修改数据?如何节约流量,
- 如何使用 t-sql 更新数据库中日期字段的部分数据(年?月?日?时?分?秒?)
- Google和facebook如何应用R进行数据挖掘
- 转-如何确保应用只有一个实例运行
- oracle11g如何将dataguard的主库数据恢复到oracle单机实例?
- 7.4 数据类型检查与转换应用实例
- 如何实现Docker镜像和容器实例的备份迁移
- 如何自动备份Linux/Unix服务器的数据
- MongoDB 导出导入备份恢复数据详解及实例
- 在Hibernate应用中如何处理批量更新和批量删除
- 如何用PowerShell还原.bak的Site Collection级别备份数据?