postgreSQL 9.4 如何从触发器回滚

postgreSQL 9.4 how to rollback from trigger

我有函数 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;

您不能从触发器或函数中 ROLLBACK,因为在函数中无法进行事务控制。

您实际上想要的似乎是在出现异常后跳过并继续。您可以使用 PL/PgSQL、per the manual 中的 BEGIN ... EXCEPTION 块来执行此操作。在内部这使用子事务就像 SAVEPOINTROLLBACK TO SAVEPOINT.