PostgreSQL. Триггер BEFORE INSERT не изменяет вставляемую строку

Есть триггер и функция, которые высчитывают поле во вставляемой строке. Проблема в том, что поле PassportNumber вставляется то, которое было в INSERT, а не то, которое посчиталось в триггере. т.е. делает обычный INSERT как если бы триггера не было. Смотрел в отладке, отладчик говорит, что в new всё записывается. Переменные newId, acceptPN объявлены для отладки.

Функция:

CREATE OR REPLACE FUNCTION public.generate_passport_number()
    RETURNS trigger
    LANGUAGE 'plpgsql'
    VOLATILE STRICT
    COST 100
AS $BODY$
DECLARE
        newPN text;
        newId integer;
        acceptPN text;
    BEGIN
        IF (TG_OP = 'INSERT') THEN
            SELECT to_char((NEW."Id" - "RequestBalloonId" + 1), '000') INTO newPN
            FROM public."YearRequestBalloon"
            WHERE "Year" = (EXTRACT(YEAR from current_date) - (EXTRACT(century from current_date) - 1) * 100);
            
            newId:= NEW."Id";
            
            NEW."PassportNumber":= newPN;
            acceptPN:= NEW."PassportNumber";
        END IF;
        RETURN NEW;
    END;
$BODY$;

Триггер:

CREATE TRIGGER set_passport_number_trg
    BEFORE INSERT
    ON public."RequestBalloon"
    FOR EACH ROW
    EXECUTE PROCEDURE public.generate_passport_number();

Может дело в каких-то правах и разрешениях?

Писал этот код по примеру из документации: Пример


Ответы (1 шт):

Автор решения: MIRILLED

Проблема оказалась в Entity Framework. EF использует sp_executesql для запросов поэтому триггер не работает ожидаемым образом, хотя он дёргается, т.к. отладчик перехватывал обращения в функцию триггера. Пробовал сделать чистый INSERT через sql и триггер отработал правильно.

→ Ссылка