Триггерийная функция PostgreSQL
У меня есть триггер-функция, которая должна дополнять запрос:
INSERT INTO table (col1, col2) VALUES (1, 2);
Мне нужно перед выполнением данного запроса произвести его модификацию и добавить еще одну колонку со значением, которое я получу из другой таблицы. В теле функции я пробовал использовать:
CREATE OR REPLACE FUNCTION trigger_fnc()
RETURNS trigger AS
$$
BEGIN
NEW.col3 := (SELECT id FROM table2 WHERE col1 = NEW.col2); -- Проблема тут
RETURN NEW;
END;
$$
LANGUAGE 'plpgsql';
CREATE TRIGGER update_table2
BEFORE INSERT
ON table
FOR EACH ROW
EXECUTE PROCEDURE trigger_fnc();
При выполнении функции в col3 падает значение null:
INSERT INTO table (cpl1, col2, col3) VALUES (1, 2, null);
Но если выполнять этот же селект вне функции, то проблем не возникает и возвращается нужное мне значение.
Несколько часов поиска ответа в сети так и не привели меня к какому-то положительному результату и вынужден просить помощи у вас. Возможно, я не правильно присваиваю значение или есть какой-то метод который упускаю.
Пример таблиц:
CREATE TABLE table(
id int,
col1 int,
col2 int,
col3 int
);
CREATE TABLE table2(
id int,
col1 int,
);