postgresql通過建立規則(RULE)實現表記錄
1、建立原表mytab
create table mytab(id int primary key,note text);
建立記錄表mytab_log
create table mytab_log(seq bigserial primary key,
oprtype char(1),
oprtime timestamp,
old_id int,
new_id int,
old_note text,
new_note text);
2、建立規則
create rule rule_mytab_insert as on insert
to mytab
do also insert into mytab_log(oprtype,oprtime,new_id,new_note) values('i',now(),new.id,new.note);
create rule rule_mytab_update as on update
to mytab
do also insert into mytab_log(oprtype,oprtime,old_id,new_id,old_note,new_note) values('u',now(),old.id,new.id,old.note,new.note);
(更新資料時實現記錄舊資料和新資料,型別為”u“)
create rule rule_mytab_delete as on delete
to mytab
do also insert into mytab_log(oprtype,oprtime,old_id,old_note) values('d',now(),old.id,old.note);
insert into mytab values(1,'abc');
insert into mytab values(2,'bac');
insert into mytab values(3,'cab');
tian=# select * from mytab;
id | note
----+------
1 | abc
2 | bac
3 | cab
(3 rows)
update mytab set note='ccc' where id=3;
delete from mytab where id=3;
tian=# select * from mytab;
id | note
----+------
1 | abc
2 | bac
(2 rows)
3、檢視資料記錄
tian=# select * from mytab_log;
seq | oprtype | oprtime | old_id | new_id | old_note | new_note
-----+---------+----------------------------+--------+--------+----------+----------
1 | i | 2017-02-25 15:19:20.932179 | | 1 | | abc
2 | i | 2017-02-25 15:19:26.350333 | | 2 | | bac
3 | i | 2017-02-25 15:19:31.822498 | | 3 | | cab
4 | u | 2017-02-25 15:19:50.297173 | 3 | 3 | cab | ccc
5 | d | 2017-02-25 15:19:56.557354 | 3 | | ccc |
(5 rows)
方式二:【改變更新記錄資料的方式】
create table mytab2(id int primary key,note text);
create table mytab_log2(
seq bigserial primary key,
oprtype char(1),
oprtime timestamp,
id int,
note text);
create rule rule_mytab_insert2 as on insert
to mytab2
do also insert into mytab_log2(oprtype,oprtime,id,note) values('i',now(),new.id,new.note);
create rule rule_mytab_update2 as on update
to mytab2
do also (insert into mytab_log2(oprtype,oprtime,id, note) values('d',now(),old.id,old.note);
insert into mytab_log2(oprtype,oprtime,id, note) values('i',now(),new.id,new.note));
(更新資料時通過分解為刪除和插入兩部分實現記錄舊資料和新資料,型別為”d“和”i“)
create rule rule_mytab_delete2 as on delete
to mytab2
do also insert into mytab_log2(oprtype,oprtime,id,note) values('d',now(),old.id,old.note);
tian=# insert into mytab2 values(1,'1111');
INSERT 0 1
tian=# insert into mytab2 values(2,'2222');
INSERT 0 1
tian=# insert into mytab2 values(3,'2222');
INSERT 0 1
tian=# select * from mytab_log2;
seq | oprtype | oprtime | id | note
-----+---------+----------------------------+----+------
1 | i | 2017-02-25 15:42:07.852126 | 1 | 1111
2 | i | 2017-02-25 15:42:15.638697 | 2 | 2222
3 | i | 2017-02-25 15:42:19.748022 | 3 | 2222
tian=# update mytab2 set note='3333' where id = 3;
UPDATE 1
tian=# delete from mytab2 where id =3;
DELETE 1
tian=# select * from mytab_log2;
seq | oprtype | oprtime | id | note
-----+---------+----------------------------+----+------
1 | i | 2017-02-25 15:42:07.852126 | 1 | 1111
2 | i | 2017-02-25 15:42:15.638697 | 2 | 2222
3 | i | 2017-02-25 15:42:19.748022 | 3 | 2222
4 | d | 2017-02-25 15:43:18.741909 | 3 | 2222
5 | i | 2017-02-25 15:43:18.741909 | 3 | 3333
6 | d | 2017-02-25 15:44:14.097896 | 3 | 3333
(6 rows)
日誌緊湊了許多
本人原部落格連線:http://blog.csdn.net/oraclesand/article/details/57083432
BY 海無涯
相關文章
- hyperjumptech/grule-rule-engine: Golang的規則引擎實現Golang
- PostgreSQL:RULESQL
- 通過 ProxySQL 在 TiDB 上實現 SQL 的規則化路由SQLTiDB路由
- 【記錄】那些很實用的Nginx規則Nginx
- EMQ X 與 HStreamDB 整合實踐:通過規則引擎實現資料儲存MQ
- drools規則屬性(rule attributes)的使用
- SAP QM Dynamic Modification Rule (動態修改規則)
- 怎麼實現通訊錄字母表
- Tomcat通過Redis實現session共享的完整部署記錄TomcatRedisSession
- Tomcat通過Memcached實現session共享的完整部署記錄TomcatSession
- 通過修改CATALOG記錄的方式實現備份集目錄變更
- PostgreSQL分割槽表、繼承表記錄去重方法SQL繼承
- 決策表模式: 一種業務規則引擎實現方式模式
- postgresql分割槽表實現方式SQL
- Java日誌記錄的5條規則Java
- 資料探勘演算法之-關聯規則挖掘(Association Rule)演算法
- 通過佇列實現棧OR通過棧實現佇列佇列
- postgresql 9.6 分割槽表測試方案與記錄SQL
- vue 實戰表單驗證規則Vue
- PostgreSQL使用表繼承實現分割槽表SQL繼承
- 建立iptables NAT規則(轉)
- 透過資料結構實現簡易通訊錄資料結構
- 通過Linux命令實現螢幕錄製和回放Linux
- 通過 SQL 實現行轉列(列的資料條目、資料分佈是不規則的)SQL
- wireshark 過濾規則
- SAP RETAIL 通過分配表建立UB STO單據AI
- Oracle補充日誌及日誌記錄規則Oracle
- [記錄]30個Oracle SQL優化規則詳解OracleSQL優化
- PostgreSQL,SQLServer邏輯增量(通過邏輯標記update,delete)同步到Greenplum,PostgreSQLSQLServerdelete
- 通過模板實現POI
- 利用SQL實現通訊錄SQL
- 呼叫通訊錄實現思路
- Shader學習筆記,通過GLSL實現(一)筆記
- Tomcat通過自帶的Cluster方式實現Session會話共享環境操作記錄TomcatSession會話
- EMQ X 與 HStreamDB 整合實踐:透過規則引擎實現資料儲存MQ
- 如何用Go快速實現規則引擎Go
- 用css實現不規則背景填充CSS
- 通過 Python 裝飾器實現DRY(不重複程式碼)原則Python