postgreSQL 9.4 как откатиться от триггера

У меня есть функция insert_val, которая вставляет некоторые значения в некоторые таблицы. Эти таблицы имеют триггеры, которые вызывают исключение, когда что-то не так. Как я могу откатить функцию всякий раз, когда триггер вызывает исключение, и перейти к следующему curs1, возможно ли это? заранее спасибо

res :='start';
OPEN curs1 FOR SELECT temp3.fid FROM temp3; 
LOOP 

FETCH curs1 INTO fidVar;
EXIT WHEN NOT FOUND;
BEGIN
if raise_exception then
rollback;
end if;
perform insert_val(fidVar,startDate,endDate);    
END;
END LOOP;

person Suzy Tros    schedule 28.05.2015    source источник


Ответы (1)


Вы не можете ROLLBACK из триггера или функции, потому что управление транзакциями внутри функций невозможно.

То, что вы на самом деле хотите, это пропустить и продолжить после исключения. Вы можете сделать это, используя блоки BEGIN ... EXCEPTION в PL/PgSQL, в соответствии с руководством. . Внутренне это использует субтранзакции точно так же, как SAVEPOINT и ROLLBACK TO SAVEPOINT.

person Craig Ringer    schedule 29.05.2015