我正在使用PostgreSQL 9.1。我的数据库是结构化的,因此有我的应用程序使用的实际表。对于每个表,都有一个历史表仅存储更改历史记录。历史表包含与实际表相同的字段,外加字段构成一些额外的信息,例如。编辑时间。历史记录表仅由触发器处理。
我有两种触发器:
Before INSERT 创建表时触发向表中添加一些额外的信息(例如create_time)。
Before UPDATE触发器和before DELETE触发器,以将旧值从实际表复制到历史表。
问题是我想使用触发器来存储进行这些更改的用户的ID。用id表示来自php应用程序的id,而不是PostgreSQL用户ID。
有什么合理的方法吗?
使用INSERT和UPDATE,可以仅将ID的额外字段添加到实际表中,并将用户ID作为SQL查询的一部分传递给SQL。据我所知,这不适用于DELETE。
所有触发器的结构如下:
CREATE OR REPLACE FUNCTION before_delete_customer() RETURNS trigger AS $BODY$
BEGIN
INSERT INTO _customer (
edited_by,
edit_time,
field1,
field2,
...,
fieldN
) VALUES (
-1, // <- This should be user id.
NOW(),
OLD.field1,
OLD.field2,
...,
OLD.fieldN
);
RETURN OLD;
END; $BODY$
LANGUAGE plpgsql
相关分类