Postgresql Postgres中的AFTER触发器是否会阻止插入/更新?

Postgresql Postgres中的AFTER触发器是否会阻止插入/更新?,postgresql,triggers,blocking,Postgresql,Triggers,Blocking,如果我在PostgreSQL中设置了一个AFTER触发器,以便在插入/更新后触发,那么调用软件在将控制权返回给调用软件之前是否必须等待触发器完成?或者触发器会在幕后自行运行吗?是的,因为它是在同一事务中执行的。如果触发器失败,插入/更新也将失败。只要执行一个将失败的查询(选择一个不存在的表)进行测试,您就可以看到事情是如何工作的以及应用程序将如何运行 CREATE OR REPLACE FUNCTION foo() RETURNS TRIGGER AS $$ BEGIN EXECUTE 'S

如果我在PostgreSQL中设置了一个AFTER触发器,以便在插入/更新后触发,那么调用软件在将控制权返回给调用软件之前是否必须等待触发器完成?或者触发器会在幕后自行运行吗?

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

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

如果需要在“幕后”完成某些操作,触发器可以使用dblink\u send\u query在触发器中发送异步请求,具体取决于您的要求。是否有办法避免这种情况?这意味着即使触发器失败,插入/更新操作也不会失败。