2017-01-21 3 views
2

У меня есть триггер INSERT в PostgreSQL, который я пытаюсь связать вставленную строку с другой таблицей, а затем вставить результат в третью таблицу. Назовем исходную таблицу, что срабатывает триггер INSERT, «A»; в таблице курсор соединяется с A на «B»; и таблица запускает функцию триггера, затем вставляет в "C".Триггер PostgreSQL AFTER INSERT и ссылка на вставленную строку

Мое мышление было то, что функция ПОСЛЕ INSERT должна позволить мне передать значение из «NEW» строки в качестве параметра для того, чтобы ссылаться на его соответствующую строку в таблице А, как это:

myCursor CURSOR (insertedKey A.key%TYPE) FOR 
    SELECT * 
    FROM A 
    INNER JOIN B 
    ON A.key=B.key 
    WHERE A.key=insertedKey; 

... 

OPEN myCursor (NEW.key); 
FETCH NEXT FROM myCursor INTO row_C; 
INSERT INTO C VALUES (row_C.*); 

Этот дает мне пустой курсор. Если я запускаю триггер ПОСЛЕ ОБНОВЛЕНИЯ, он работает, но со старой строкой от A. Это заставляет меня думать, что PostgreSQL не думает, что ПОСЛЕ INSERT/UPDATE означает то, что, на мой взгляд, означает.

Возможно, я просто делаю что-то неправильно? Есть ли способ сделать то, что я пытаюсь сделать?

ответ

3

Не знаю, почему это происходит, но вы могли бы сделать что-то вдоль линии

INSERT INTO C 
    SELECT NEW.*, B.* 
    FROM B 
    WHERE B.key = NEW.key 
+0

Я не думал об этом. Мне также кажется, что я передаю всю новую строку в качестве параметра курсора. –

Смежные вопросы