Не могу изменить поля в NEW в триггерной ф-ии.

Добрый день, коллеги.

Ранее не использовал триггеры в 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, а потом продолжаете вставку в основную таблицу

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023