以下是使用 PL/pgSQL 维护数据表修改时间戳的经典触发器实现范例:
CREATE TABLE emp (
empname text,
salary integer,
last_date timestamp,
last_user text
);
CREATE OR REPLACE FUNCTION emp_stamp() RETURNS trigger AS $$
BEGIN
-- 校验薪资不能为负
IF NEW.salary < 0 THEN
RAISE EXCEPTION '员工薪水不能为负数: %', NEW.salary;
END IF;
-- 自动记录最后更新时间与操作者
NEW.last_date := current_timestamp;
NEW.last_user := session_user;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER emp_stamp_trigger
BEFORE INSERT OR UPDATE ON emp
FOR EACH ROW
EXECUTE FUNCTION emp_stamp();