PostgreSQL写更新触发器,如何获取当前更新记录的内容
时间: 2024-10-11 21:05:16 浏览: 126
PostgreSQL更新表时时间戳不会自动更新的解决方法
在PostgreSQL中,写入更新触发器(Update Trigger)是一种机制,当特定表的数据发生更改时,会自动执行预先定义的SQL指令。为了在触发器中获取当前更新记录的内容,你需要使用`NEW`关键字,它代表了更新后的行内容。
假设你有一个名为`employees`的表,你想在每次员工信息更新时记录他们的新信息,你可以创建一个触发器如下:
```sql
CREATE OR REPLACE TRIGGER update_employee_trigger
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
INSERT INTO audit_log (employee_id, old_data, new_data)
VALUES (NEW.employee_id,
(SELECT * FROM employees WHERE employee_id = OLD.employee_id),
(SELECT * FROM employees WHERE employee_id = NEW.employee_id));
END;
```
在这个例子中:
- `AFTER UPDATE ON employees`: 指定在`employees`表的更新操作之后执行触发器。
- `FOR EACH ROW`: 表示每次更新一行都会触发这个触发器。
- `OLD.data`:表示的是被更新前的行内容。
- `NEW.data`:表示的是被更新后的行内容,即触发器中插入到`audit_log`的新内容。
当你更新`employees`表中的某条记录时,触发器会同时插入原记录和新记录的信息到`audit_log`表中。
阅读全文