Я использую PostgreSQL 9.1. Моя база данных структурирована так, что в ней используются реальные таблицы. Для каждой таблицы есть таблица истории, в которой хранится только история изменений. Таблицы истории содержат те же поля, что и фактические таблицы плюс поля, образуют некоторую дополнительную информацию, например. время редактирования. Таблицы истории обрабатываются только триггерами.
У меня есть два типа триггеров:
-
Before INSERT
триггер для добавления дополнительной информации в таблицы при их создании (например, create_time). -
Before UPDATE
триггер иbefore DELETE
триггеры для копирования старых значений из фактической таблицы в таблицу истории.
Проблема в том, что я хотел бы использовать триггеры для хранения и идентификатора пользователя, внесшего эти изменения. И по id я имею в виду id из приложения php, а не идентификатор пользователя PostgreSQL.
Есть ли разумный способ сделать это?
С помощью INSERT и UPDATE можно было бы просто добавить дополнительное поле для идентификатора в фактические таблицы и передать идентификатор пользователя 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