Триггерийная функция 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,
);

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