#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();