将用户ID传递给PostgreSQL触发器

我正在使用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


缥缈止盈
浏览 568回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

MySQL