Добрый день, коллеги.
Ранее не использовал триггеры в PostgreSQL. И столкнулся с непонятной проблемой.
Вот простая триггерная ф-ия :
CREATE OR REPLACE FUNCTION code_translit_list_obj_entity() RETURNS TRIGGER AS $BODY$ DECLARE codetext text; nametext text; BEGIN nametext := NEW.id::text; codetext := 'entity' || nametext; NEW.code := codetext; INSERT INTO test_log_proc ( text_1, text_2 ) VALUES ( nametext, codetext ); RETURN NEW; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100;
Триггер :
CREATE TRIGGER tr_code_translit_list_obj_entity AFTER INSERT OR UPDATE ON list_obj_entity FOR EACH ROW EXECUTE PROCEDURE code_translit_list_obj_entity ();
Сама ф-ия срабатывает - в таблицу test_log_proc заносятся актуальные данные.
Но значение поля code в добавленной записи (а это NEW.code ) не изменяется (хотя, исходя из примеров, вроде как должно изменяться).
Подскажите, что я делаю не так?
Как мне изменить поле code во вставляемой записи?
Спасибо.
Как мне изменить поле code во вставляемой записи?
если я правильно поняла, то вам надо делать триггер не AFTER а BEFORE. Т.е перед вставкой вы записываете в test_log_proc, а потом продолжаете вставку в основную таблицу