У меня есть таблица charass
, в этой таблице у меня есть триггер
CREATE TRIGGER charassheattrigger
BEFORE INSERT OR UPDATE
ON public.charass
FOR EACH ROW
EXECUTE PROCEDURE public._charassheattrigger();
Функция, выполняемая этим триггером, выглядит как
CREATE OR REPLACE FUNCTION public._charassheattrigger()
RETURNS trigger
LANGUAGE 'plpgsql'
COST 100
VOLATILE
AS $BODY$
BEGIN
IF (TG_OP = 'INSERT' OR (TG_OP = 'UPDATE' AND OLD.charass_value <> NEW.charass_value)) AND NEW.charass_char_id = 34 THEN
IF NOT EXISTS(SELECT true FROM heat WHERE heat_number = NEW.charass_value) THEN
INSERT INTO heat (heat_number,heat_created,heat_vend_id)
SELECT NEW.charass_value,NOW(), order_vend_id
FROM ls
JOIN detail ON (ls_id = detail_ls_id)
JOIN hist ON (detail_hist_id = hist_id)
JOIN order ON (hist_order_id = order_id)
WHERE hist_ordtype = 'PO' AND hist_transtype = 'RP' AND ls_id = NEW.charass_target_id;
END IF;
END IF;
RETURN NEW;
END;
$BODY$;
Когда я смотрю на файл журнала , Я вижу выполненное выражение
statement: INSERT INTO charass (charass_value, charass_target_type, charass_target_id, charass_char_id) VALUES ('123456789', 'LS', 1234, 34)
Я проверяю таблицу тепловых потоков, ожидающую увидеть запись с параметром heat_number, как «123456789», но в таблице тепловых режимов ничего нет.
Итак, я открываю pg admin, копирую приведенную выше инструкцию и выполняю ее вручную. Теперь есть запись в таблице тепла.
В чем разница между ручной вставкой и той, которую выполняет приложение. Есть ли способ сказать? имя пользователя, стоящее за оператором, одинаково, поэтому оно не может быть разрешением. Мне было интересно, есть ли способ отправить информацию из функции триггера в файл журнала, чтобы я мог просмотреть ее