2010-06-29 78 views
11

如果我在PostgreSQL中设置了一个AFTER触发器在插入/更新后触发,调用软件必须等待触发器完成才能将控制权返回给调用软件?或者触发器会在幕后运行?Postgres中的AFTER触发器是否会阻止插入/更新?

+4

如果你需要的东西来完成“幕后”你的触发器可以使用dblink_send_query http://www.postgresql.org/docs/current/static/contrib-dblink-send-query.html发送异步请求在您的触发器 - 取决于您的要求。 – rfusca 2010-06-29 17:20:05

回答

13

是的,因为它在同一个事务中执行。如果触发失败,则插入/更新也会失败。只要做一个测试来执行一个会失败的查询(选择一个不存在的表),你就可以看到事情是如何工作的以及你的应用程序的行为。

CREATE OR REPLACE FUNCTION foo() RETURNS TRIGGER 
AS 
$$ 
BEGIN 
    EXECUTE 'SELECT fail'; 
END; 
$$ 
LANGUAGE plpgsql; 
+0

有没有办法避免这种情况?这意味着即使触发器失败,插入/更新操作也不应该失败。 – Zoran777 2017-07-13 09:46:32