⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

基于触发器的审计回滚与时间旅行查询

讲解如何利用触发器+hstore或JSONB实现行级历史追踪,并支持一键回滚到任意历史版本。 · 难度:入门 · +10XP

基于触发器的审计回滚与时间旅行查询

传统审计只记录谁改了数据,但无法直接回滚。本教程将演示:创建审计表保存每行每次变更的完整快照(使用hstore或JSONB),然后在原表上编写AFTER UPDATE触发器,自动将旧值写入审计表。同时实现一个函数,可根据时间戳和主键将某行恢复到指定历史版本。这种方法不依赖扩展,性能可控,适合合规或误操作恢复场景。

-- 创建审计表
CREATE TABLE employee_audit (
    audit_id BIGSERIAL PRIMARY KEY,
    table_pk INT,
    old_data JSONB,
    changed_at TIMESTAMPTZ DEFAULT now()
);

-- 触发器函数 CREATE OR REPLACE FUNCTION audit_employee() RETURNS TRIGGER AS $$ BEGIN INSERT INTO employee_audit(table_pk, old_data) VALUES (OLD.id, to_jsonb(OLD)); RETURN NEW; END; $$ LANGUAGE plpgsql;

CREATE TRIGGER trg_audit AFTER UPDATE ON employee FOR EACH ROW EXECUTE FUNCTION audit_employee();

Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 131 篇
0 完成
🔥 0