据我所知,如果我们尝试对该操作执行某些触发的表执行某些写操作,并且触发失败,则写操作也将失败。看起来两个操作都在同一个事务中执行。但是可以做到以下几点:
答案 0 :(得分:1)
为什么不将它分成2个程序并作为单独的程序进行写入?根据您发布的信息,这是我的建议,如果您需要更多信息,我们需要更多信息 (数据库供应商和版本,并发布您的代码)
答案 1 :(得分:1)
触发器中引发的错误可以通过向触发器代码添加EXCEPTION
clause来捕获。异常块可以包含RAISE LOG
/RAISE WARNING
语句以将消息写入服务器日志(尽管这取决于configuration)。触发触发器的操作仍然可以成功完成。
例如,如果您的触发器主体是:
$$
BEGIN
INSERT INTO t VALUES (new.id);
RETURN NULL;
END
$$
然后你可能想要这样的东西:
$$
BEGIN
INSERT INTO t VALUES (new.id);
RETURN NULL;
EXCEPTION
WHEN unique_violation THEN
RAISE LOG 'Duplicate ID %', new.id;
RETURN NULL;
END
$$