发布于2026-08-20 阅读(0)
扫一扫,手机访问
Debian系统中PostgreSQL触发器的常见应用场景

一 核心概念与适用范围
二 典型业务场景
三 简明示例
CREATE OR REPLACE FUNCTION update_updated_at()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at := NOW();
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER trg_set_updated_at
BEFORE UPDATE ON users
FOR EACH ROW
EXECUTE FUNCTION update_updated_at();CREATE TABLE users_audit(
id SERIAL PRIMARY KEY,
user_id INT,
op TEXT,
old_data JSONB,
new_data JSONB,
changed_by TEXT,
changed_at TIMESTAMP DEFAULT NOW()
);
CREATE OR REPLACE FUNCTION log_user_change()
RETURNS TRIGGER AS $$
BEGIN
IF TG_OP = 'INSERT' THEN
INSERT INTO users_audit(user_id, op, new_data, changed_by)
VALUES (NEW.id, TG_OP, row_to_json(NEW)::JSONB, current_user);
RETURN NEW;
ELSIF TG_OP = 'UPDATE' THEN
INSERT INTO users_audit(user_id, op, old_data, new_data, changed_by)
VALUES (NEW.id, TG_OP, row_to_json(OLD)::JSONB, row_to_json(NEW)::JSONB, current_user);
RETURN NEW;
ELSIF TG_OP = 'DELETE' THEN
INSERT INTO users_audit(user_id, op, old_data, changed_by)
VALUES (OLD.id, TG_OP, row_to_json(OLD)::JSONB, current_user);
RETURN OLD;
END IF;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER trg_users_audit
AFTER INSERT OR UPDATE OR DELETE ON users
FOR EACH ROW
EXECUTE FUNCTION log_user_change();CREATE OR REPLACE FUNCTION prevent_delete_admin()
RETURNS TRIGGER AS $$
BEGIN
IF OLD.role = 'admin' THEN
RAISE EXCEPTION '不允许删除管理员用户';
END IF;
RETURN OLD;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER trg_prevent_delete_admin
BEFORE DELETE ON users
FOR EACH ROW
EXECUTE FUNCTION prevent_delete_admin();上述示例涵盖了BEFORE/AFTER、行级触发、使用NEW/OLD/TG_OP等常见模式,能够直接在Debian系统上的PostgreSQL实例中运行。
四 实践建议
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
4
5
6
7
8
9