Как создать хранимую процедуру для сохранения истории определенного столбца перед обновлением в postgres

#postgresql #stored-procedures #triggers

#postgresql #хранимые процедуры #триггеры

Вопрос:

По сути, я просто хочу получить старое значение определенного столбца перед его обновлением и сохранить его в другой таблице. Я хочу выполнить это с помощью хранимой процедуры в Postgres.

transaction_table

 tid (primary)
status_id (integer)
 

history_table

 hid (primary)
tid (integer)
old_value (integer)
new_value (integer)
date (timestamp)
 

Любые изменения в status_id будут сохранены в history_table . Возможно ли это?

Комментарии:

1. Существует несколько решений. Смотрите здесь или здесь или здесь

Ответ №1:

Канонический способ сделать это — использовать триггер:

 CREATE FUNCTION trans_hist() RETURNS trigger
   LANGUAGE plpgsql AS
$BEGIN
   INSERT INTO history_table (tid, old_value, new_value, date)
   VALUES (NEW.tid, OLD.status_id, NEW.status_id, chrrent_timestamp);

   RETURN NEW;
END;$;

CREATE TRIGGER trans_hist AFTER UPDATE ON transaction_table
   FOR EACH ROW EXECUTE PROCEDURE trans_hist();